sql - 如何使用TSQL按组获取日期差异统计

标签 sql sql-server t-sql sql-server-2000

我有一个包含产品和销售日期列的表格,想查询每个产品组的销售间隔统计(最大间隔,最小间隔...),有什么好的建议可以制作吗,不胜感激~

Prod    SaleDate
-------------------
A       2013-02-05
D       2013-02-24
B       2013-03-01
A       2013-03-12
D       2013-03-22
A       2013-04-03
D       2013-04-08 
. . .

售出间隔是指两个相邻日期之间的天数间隔。

A的售出间隔: DATEDIFF(d, '2013-02-05', '2013-03-12') DATEDIFF(d, '2013-03-12', '2013-04-03') ...

D的售出间隔: DATEDIFF(d, '2013-02-24', '2013-03-22') DATEDIFF(d, '2013-03-22', '2013-04-08')


我想要获取销售间隔的平均值、最大值和最小值。

Prod    IntervalAvg     IntervalMax    IntervalMin
-----------------------------------------------------
A       xxx             xxx            xxx
B       xxx             xxx            xxx
C
. . .

最佳答案

谢谢卡恩的回答给我一个提示。我通过“左外连接”重新实现 sql server 2000 的代码。

DECLARE @DATA TABLE (Prod CHAR(1), SaleDate SMALLDATETIME)
INSERT INTO @DATA VALUES ('A','2013-02-05')
INSERT INTO @DATA VALUES ('D','2013-02-24')
INSERT INTO @DATA VALUES ('B','2013-03-01')
INSERT INTO @DATA VALUES ('A','2013-03-12')
INSERT INTO @DATA VALUES ('D','2013-03-22')
INSERT INTO @DATA VALUES ('A','2013-04-03')
INSERT INTO @DATA VALUES ('D','2013-04-08')


SELECT     
t.Prod
, MAX(t.Interval) IntervalMax
, MIN(t.Interval) IntervalMin
, AVG(t.Interval) IntervalAvg

FROM 
(
    SELECT t1.*, DATEDIFF(dd, MAX(t2.SaleDate), t1.SaleDate) Interval
    FROM @DATA t1
    LEFT OUTER JOIN @DATA t2 ON t1.Prod = t2.Prod AND t1.SaleDate > t2.SaleDate
    GROUP BY t1.Prod, t1.SaleDate
)t
GROUP BY t.Prod
ORDER BY t.Prod

关于sql - 如何使用TSQL按组获取日期差异统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22952595/

相关文章:

mysql - HTML5;通过地理定位找到我附近的东西

python - "Invalid parameter type"(numpy.int64) 使用 executemany() 插入行时

sql - 连接 varchar 时的顺序。没有按预期工作

sql-server - SQL Server : what do tables named #ABCDEF01 contain?

sql-server - 索引是否已覆盖聚集主键?

sql - PL/SQL Developer 中的查询执行时间

MySQL - 按十五分钟间隔对时间范围进行分组

sql - 查找链接服务器上的列依赖项

sql - 将大表导入azure sql数据库

sql - 更改 SQL Server 2012 中现有列的列默认值