如何计算几个日期之间的记录数

Posted

技术标签:

【中文标题】如何计算几个日期之间的记录数【英文标题】:How to calculate count of records between several dates 【发布时间】:2014-05-19 11:36:37 【问题描述】:

我有一个看起来像这样的表:

date         name     lookback_date
1995-01-31   T1       1994-10-24
1995-01-30   T1       1994-10-23
1995-01-29   T1       1994-10-22
1995-01-31   T2       1994-10-24
1995-01-30   T2       1994-10-23
1995-01-29   T2       1994-10-22
1995-01-31   T3       1994-10-24
1995-01-30   T3       1994-10-23
1995-01-29   T3       1994-10-22

等等

我需要计算每条记录的日期和lookback_date之间的名称计数

编辑:我需要一个看起来像这样的结果:

 date         name     lookback_date  cnt
1995-01-31   T1       1994-10-24     70
1995-01-30   T1       1994-10-23     69
1995-01-29   T1       1994-10-22     67
1995-01-31   T2       1994-10-24     73
1995-01-30   T2       1994-10-23     65
1995-01-29   T2       1994-10-22     63
1995-01-31   T3       1994-10-24     68
1995-01-30   T3       1994-10-23     66
1995-01-29   T3       1994-10-22     65

输入日期是用这个语句获取的

select date, ticker_name
        ,dateadd(days, -100, date) as lookback_date
from table1

【问题讨论】:

根据发布的数据显示所需的输出。 dateadd 是一个 SQL Server 函数。您的问题被标记为 Postgresql。什么是数据库引擎? PADB。 ParAccel 集群。它使用带有一些额外功能的 Postgresql。 dateadd 就是其中之一。 您可能需要为此创建一个 SQL Fiddle。 【参考方案1】:

试试这个(我没试过)

SELECT t1.date, t1.ticker_name, dateadd(days, -100, date) AS lookback_date,
    (SELECT count(ticker_name) AS cnt
     FROM table1
     WHERE date > t1.date
           AND date < dateadd(days, -100, date))
FROM table1 t1

它在应该执行此操作的 SELECT 子句中使用子选择,但需要优化。

基本上,您希望使用两个相互引用的选择,一个用于日期范围选择,一个用于计数。然后在 FROM 子句或 SELECT 子句中加入它们。

FROM 子句会更好,因为它更易读,因此更易于维护。

【讨论】:

这很有帮助。有几个调整,但你的想法奏效了。谢谢!

以上是关于如何计算几个日期之间的记录数的主要内容,如果未能解决你的问题,请参考以下文章

SSAS 获取两个日期之间的活动记录数

根据上次更新日期计算记录数 + null

如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?

在Django中按日期计算记录数

如何使用mysql计算两个日期之间的时间差

如何扩展记录 n 次并计算同一字段中日期的 Datediff?