这个问题有点复杂,但要尽可能简单:
我有一个时间戳列表(以百万计,但为了简单起见,它要小得多):
order_times
-----------
2014-10-11 15:00:00
2014-10-11 15:02:00
2014-10-11 15:03:31
2014-10-11 15:07:00
2014-10-11 16:00:00
2014-10-11 16:04:00我正在尝试构建一个查询(在PostgeSQL中),该查询允许我确定一个order_time在2 order_times之前的10分钟内发生的次数(而且不会更多)。
在上面的样本数据中:
我希望这是清楚的!
发布于 2014-10-15 17:18:12
你不需要看第一个之前的,只是在每个之前的第二个。如果是在10分钟内,那么后面的那个也是。
最好的方法是将对您很重要的数据放到一行中,这样就可以对其进行设置操作。为此,可以使用窗口函数ROW_NUMBER()和一个自联接。这是MS的方式来做您想做的事情。
WITH T1 AS (
SELECT ID, Order_Time, ROW_NUMBER() OVER( ORDER BY Order_Time) AS RowNumber FROM myTest)
SELECT T1.ID,T1.Order_Time, T2.ID AS CompareID,T2.Order_Time AS CompareTime
FROM T1 LEFT OUTER JOIN T1 AS T2 ON T1.RowNumber-2 = T2.RowNumber
WHERE DATEDIFF(n,t2.Order_Time,t1.Order_Time)<=10首先,我们创建一个具有行号的查询,然后使用它作为内联表进行自连接,以构建包含每个订单的行,以及在其发生之前两个顺序的行。然后,只需进行简单的日期比较,就可以选择想要的行。
https://stackoverflow.com/questions/26386753
复制相似问题