2016-04-25 12 views
-3

最大値を検索したい。そして分。私のテーブルのいくつかのレコードの間の日数。たとえば、次の表ではmaxを使用したいと考えています。そして分。各IDのDATEフィールドに起因する日数。 私はMS-SQL 2013を使用しています複数の日付間の最大日数をSQLで検索

2つの日付の間の日を見つけるのに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

2つの日付の間の日を見ている場合、MAXまたはMINはなく、静的な値です。あなたはあなたの質問ではっきりしていません、あなたが期待している出力を明確にすることができますか? P.S.あなたはSQLバージョンをチェックしたいと思うかもしれませんが、2013年は私が知っている限り有効なバージョンではありません(2012年から2014年にかけて)。 –

答えて

1

[OK]を、私はあなたの答えを再読み込み、あなたは以下のようなものを探していました。

一時テーブルの作成とデータの挿入。

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を削除することができます。これは、比較する日付を表示するためのものです。変数の日付の間に日付が1つしかない場合は、0の値を返しますので、これを考慮する必要があります。また、NULLをチェックするために何かを入れるのもよい考えです。

1

あなたはこのを試してみました:

Select ID, Min(Date), Max(Date) From MyTable Group By ID 
3

このソリューションは、(2つのサブクエリを使用して)少し醜いですが、あなたが始める必要があります理解する

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と次の上位IDの間の日数を配信します。

外部クエリは、単純なMIN MAX GROUP BYです。

関連する問題