2017-08-04 15 views
0

次のレコードセットがあり、前回のバージョン変更のタイムスタンプを取得したいとします。最新のタイムスタンプの変更SQL Server

id ver  date_create 
123 1.0.9.8 2016-04-07 12:36:26.567 
123 1.0.9.8 2016-03-25 09:10:26.303 
123 1.0.9.8 2016-03-25 08:50:42.553 
123 1.0.9.8 2016-03-24 11:09:47.620 
123 1.0.9.8 2016-03-12 21:30:47.823 
123 1.0.9.8 2016-03-12 13:38:44.950 <-- I have to get this record only 
123 1.0.0.4 2016-03-06 20:26:54.477 
123 1.0.9.8 2016-03-06 16:25:28.790 
123 1.0.0.4 2016-03-03 21:41:35.807 
123 1.0.0.4 2016-03-02 19:00:30.257 
123 1.0.9.8 2016-03-02 18:24:42.060 
123 1.0.0.4 2016-02-29 08:04:43.367 

私は分(タイムスタンプ)を取得する方法がわからない私は、最大バージョンを取得することができたと、次のクエリ、その後lag.Howeverを持って

SELECT id,ver,date_create,LAG(date_create) OVER (ORDER BY date_create DESC) AS lag 
FROM mytable 
ORDER BY date_create DESC 

出力

123 1.0.9.8 2016-05-10 07:13:55.070  NULL 
123 1.0.0.4 2016-03-06 20:26:54.477  2016-03-12 13:38:44.950 <-- I got the timestamp using the lag 

所望の出力

123 1.0.9.8 2016-03-12 13:38:44.950 
+0

これはこのバージョンの最小値ではありませんか? 123 1.0.9.8 2016-03-02 18:24:42.060 –

+2

なぜ1.5.1.5が最新バージョンではないのですか? –

+1

@FerdinandGasparはい、バージョン変更後の最小タイムスタンプが必要です。 –

答えて

0

ソリューションに.get number.Nextはrow_no =で最大日付のバージョンを取得する各行を与える各version.Alsoための各バージョンと最大日付2、そのバージョンの上にあるすべての行を取得し、最終的に最小の日付を取得します。

;WITH meter_versions AS 
(
    SELECT id, ver, date_create = MAX(date_create), row_no = ROW_NUMBER() OVER (PARTITION BY id ORDER BY MAX(date_create) DESC) 
    FROM mytable 
    GROUP BY id, ver 
) 
SELECT a.id,a.ver, date_create = MIN(a.date_create) 
FROM meter_versions 
JOIN mytable a 
ON a.id = meter_versions.id 
AND a.date_create > meter_versions.date_create 
WHERE meter_versions.row_no = 2 
GROUP BY a.id,a.ver 
0

うーん。 。 。

select top (1) ver, min(date_create) 
from t 
group by ver 
order by max(date_create) desc; 
0
WITH v_sorting AS 
(SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) v_rnum 
    FROM versions 
), 

v_tag AS 
(SELECT v1.id, v1.ver, v1.date_create, CASE WHEN v1.ver <> v2.ver THEN 1 
ELSE 0 END tag 
    FROM v_sorting v1, v_sorting v2 
WHERE v1.v_rnum = v2.v_rnum - 1 
) 

SELECT TOP(1) id, ver, date_create 
    FROM v_tag 
WHERE tag = 1 
ORDER BY date_create DESC; 

RESULT

id ver  date_create 
123 1.0.9.8 2016-03-12 13:38:44.950 
関連する問題