【发布时间】:2019-11-09 18:50:10
【问题描述】:
如果每个 ID 有两个或多个日期,我需要计算平均天数:date1 和 date2、date2 和 date3 之间的天数等。输出需要是每个 ID 每个间隔之间的平均天数.我正在寻找一种解决方案,它遍历每个 ID 的每个日期,然后平均天数
我可以通过 id 创建行号和分区,但在实际数据中,每个 ID 最多可以有 20 行。
CREATE TABLE #ATABLE(
ID INTEGER NOT NULL
,DATE DATE NOT NULL
);
INSERT INTO #ATABLE(ID,DATE) VALUES (1,'1/1/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/1/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/10/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/20/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (2,'1/30/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (3,'1/1/2019');
INSERT INTO #ATABLE(ID,DATE) VALUES (3,'1/10/2019');
--get avg days between orders
DROP TABLE #ATABLE
上面的输出是:
ID AvgDatediff
1 Null
2 10
3 9
【问题讨论】:
-
到目前为止你尝试过什么?您需要停止认为 SQL Server(和其他 RDBMS)也是一个应用程序。您应该在 SQL Server 中尽可能地避免 迭代,这很糟糕。 SQL Server 最适合使用基于集合的方法,这似乎可以通过集合方法和
LEAD/LAG之类的函数轻松实现。
标签: sql sql-server select sql-server-2012 iteration