2016-04-25 101 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。

相關問題