查找SQL中多个日期之间的最大和最小天数

时间:2016-04-25 07:38:25

标签: sql sql-server date

我想找到最大值。和分钟。我桌子上几个记录之间的天数。例如,在下表中我想有最大值。和分钟。由于每个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中查询吗?

3 个答案:

答案 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。