2016-04-25 102 views
-3

我想查找最大值。和分钟。我的表格中的几个记录之间的天数。例如,在下面的表格中,我希望具有最大值。和分钟。每个ID的DATE字段的日期。 我正在使用MS-SQL 2013在SQL中查找几个日期之间的最大和最小天数

我知道有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

如果您正在查看两个日期之间的日期,那么没有MAX或MIN,这是一个静态值。你的问题不是很清楚,你能否澄清你期望的输出。附:你可能想检查你的SQL版本,据我所知(从2012年到2014年),2013并非有效版本。 –

回答

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') 

SELECT语句检索数据;

DECLARE @StartDate DateTime; SET @StartDate = '2015-12-01' 
DECLARE @EndDate DateTime; SET @EndDate = '2016-12-01' 

SELECT 
a.ID 
,MIN(DATE) FirstDate 
,MAX(DATE) LastDate 
,DATEDIFF(day, MIN(DATE), MAX(DATE)) DayDiff 
FROM #DataTable a 
WHERE a.DATE BETWEEN @StartDate AND @EndDate 
GROUP BY a.ID 

您可以删除字段FirstDate和LastDate,这只是显示正在比较的日期。如果变量日期之间只有一个日期,那么您将返回0值,因此您可能必须对此进行解释。也可能是一个好主意,把一些东西来检查一个NULL。

1

你有没有尝试过这样的:

Select ID, Min(Date), Max(Date) From MyTable Group By ID 
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,以及该行中的日期和来自同一id的下一个更高的日期之间的天数。

外部查询然后是一个简单的MIN MAX GROUP BY。

相关问题