我正在使用SQL助手,我的数据以时间戳的形式从一个巨大的数据库中导入快照。有时,快照每小时会产生多个快照。数据是正确的,多个快照确实会在一小时内不时发生,但并不总是发生。
我把它带到Spotfire中,每小时查看一次,当一小时内发生多个快照时,数据显示为双倍。
我只想每小时显示一个,最好是该小时的最后(最大)时间戳。例如,对于上午7点,数据有一个上午7:10的快照和一个上午7:55的快照
这些都是正确的,但我只想显示最后一个(最大)时间戳,在这种情况下是上午7:55。我不能在Spotfire中解决这个问题,所以我倾向于在SQL中进行修复。我如何才能在每小时只显示1?
发布于 2019-10-03 23:46:46
这与在SQL中类似--使用ranking/rownumber函数。
Spotfire works中基本的Rank方式是Rank(排序列,排序方向,分区列,并列方法)
您需要按日期和小时的组合进行分区,然后按时间戳列降序排序。
因此,标识您想要隔离的行的代码应该是这样的:
Rank([TimestampColumn], "desc", Date([TimestampColumn]), Hour([TimestampColumn]), "ties.method=first")从这里对它做什么将取决于您计划如何使用数据-例如,您可以使用表达式限制数据,并将上面的代码设置为=1,这将相应地限制您的表(如果您不希望用户意外忘记过滤,这很有用),或者您可以创建一个计算列,将其转换为某种形式的标志,如下所示:
If(Rank([TimestampColumn], "desc", Date([TimestampColumn]), Hour([TimestampColumn]), "ties.method=first") = 1, "Latest", "Duplicate")允许您的用户根据此属性进行筛选。这样,他们就可以选择查看额外的行。
但最终,如果您只想看到这些行,而不想使用前面的记录,那么我可能会用SQL来实现,如果您有这种能力的话。这减少了必须加载到分析中的行数。
https://stackoverflow.com/questions/58145303
复制相似问题