如何计算几个日期之间的记录数
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 子句会更好,因为它更易读,因此更易于维护。
【讨论】:
这很有帮助。有几个调整,但你的想法奏效了。谢谢!以上是关于如何计算几个日期之间的记录数的主要内容,如果未能解决你的问题,请参考以下文章