首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以计算时间戳的迭代计数吗?

可以计算时间戳的迭代计数吗?
EN

Stack Overflow用户
提问于 2014-10-15 15:48:22
回答 1查看 32关注 0票数 0

这个问题有点复杂,但要尽可能简单:

我有一个时间戳列表(以百万计,但为了简单起见,它要小得多):

代码语言:javascript
复制
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分钟内发生的次数(而且不会更多)。

在上面的样本数据中:

  • 第一次时间戳被认为是0,因为它之前没有订单。
  • 第二个时间戳被认为是0,因为它在它之前的10分钟内,但是只有一个请求在它之前。
  • 第三个时间戳被认为是1,因为在10分钟内至少有2个订单。
  • (等等).

我希望这是清楚的!

EN

回答 1

Stack Overflow用户

发布于 2014-10-15 17:18:12

你不需要看第一个之前的,只是在每个之前的第二个。如果是在10分钟内,那么后面的那个也是。

最好的方法是将对您很重要的数据放到一行中,这样就可以对其进行设置操作。为此,可以使用窗口函数ROW_NUMBER()和一个自联接。这是MS的方式来做您想做的事情。

代码语言:javascript
复制
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

首先,我们创建一个具有行号的查询,然后使用它作为内联表进行自连接,以构建包含每个订单的行,以及在其发生之前两个顺序的行。然后,只需进行简单的日期比较,就可以选择想要的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26386753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档