我想找到最大值。和分钟。我桌子上几个记录之间的天数。例如,在下表中我想有最大值。和分钟。由于每个ID的DATE字段而导致的天数。 我正在使用MS-SQL 2013
我知道dateiff
找到两个日期之间的天数,但现在,我想查找几个日期之间的最长和最短天数。
ID DATE
10 2016/01/13
10 2016/01/10
10 2016/11/01
10 2015/12/28
11 2015/12/11
11 2016/02/01
11 2015/01/01
现在,我怎样才能找到最大值。和分钟。每个ID在DATE之间的天数?
你能帮我在SQL中查询吗?
答案 0 :(得分:3)
这个解决方案有点难看(使用两个子查询),但应该让你开始:
CREATE TABLE #DataTable (id INT, [date] DATETIME)
INSERT INTO #DataTable (id, [date])
VALUES (10, '20160113')
,(10, '20160110')
,(10, '20161101')
,(10, '20151211')
,(11, '20151211')
,(11, '20160201')
,(11, '20150101')
SELECT
id
, MIN([days]) AS mindays
, MAX([days]) AS maxdays
FROM (
SELECT
id
, DATEDIFF(DAY, [date], (SELECT MIN([date]) FROM #DataTable AS D1 WHERE D1.id = #DataTable.id AND D1.[date] > #DataTable.[date])) AS [days]
FROM #DataTable
) AS t
GROUP BY id
ORDER BY id
最简单的理解方法是从中间查询开始(可以单独运行)。它为每一行提供了id,以及行中日期和下一个更高的日期之间的天数。
外部查询是一个简单的MIN MAX GROUP BY。
答案 1 :(得分:1)
你试过这个:
Select ID, Min(Date), Max(Date) From MyTable Group By ID
答案 2 :(得分:1)
好的,我已经重新阅读了你的答案,你是否正在寻找下面的内容;
创建临时表并插入数据;
:
选择要检索数据的语句;
CREATE TABLE #DataTable (ID int, DATE DateTime)
INSERT INTO #DataTable (ID, DATE)
VALUES
(10, '2016-01-13')
,(10, '2016-01-10')
,(10, '2016-11-01')
,(10, '2015-12-11')
,(11, '2015-12-11')
,(11, '2016-02-01')
,(11, '2015-01-01')
您可以删除FirstDate和LastDate字段,这只是为了显示正在比较的日期。如果您的变量日期之间只有一个日期,那么您将返回0值,因此您可能需要考虑这一点。也许是一个好主意,可以检查一下NULL。