2016-07-12 8 views
0

Ich habe mehrere datetime Spalten. Ich muss in SQL Server 2008 für jeden Zeitstempel berechnen, wie viele Datums- und Zeitstempel in derselben Spalte kleiner sind als jeder der Datum/Uhrzeit-Stempel.Daten zählen und vergleichen Sie sie gleichzeitig SQL Server 2008

Zum Beispiel: für 2016-05-01 14:24:000.00 in Spalte DateTime1 Ich muss berechnen, wie viele Datetime Werte kleiner sind als in Spalte DateTime1.

Ich muss auch wissen, wie viele datetimestamps kleiner sind als ein datetime Stempel für den gleichen Datensatz (in der gleichen Zeile) in Spalte DateTime2 und 3.

DateTime1     DateTime2     DateTime3 
---------------------------------------------------------------------------- 
2016-05-01 13:24:000.00 2016-05-01 15:24:000.00 2016-05-01 16:20:000.00 
2016-05-01 13:30:000.00 2016-05-01 14:21:000.00 2016-05-01 15:10:000.00 
2016-05-01 14:24:000.00 2016-05-01 17:21:000.00 2016-05-01 18:10:000.00 
+0

Bearbeiten Sie Ihre Frage und Probenergebnisse liefern. –

Antwort

0

Wenn ich richtig verstehe, Sie rank() verwenden können:

select t.*, 
     rank() over (order by datetime1) as dt1_rank, 
     rank() over (order by datetime2) as dt2_rank, 
     rank() over (order by datetime3) as dt3_rank 
from t ; 

Je nachdem, wie Sie gebunden Werte behandeln wollen, möchten Sie vielleicht tatsächlich dense_rank(). Vielleicht möchten Sie auch 1 vom Ranking-Wert subtrahieren.

0

Angenommen, ich habe einen Tabellennamen [TestTB] hat 3 Spalten DateTime1, DateTime2, DateTime3. Ich habe CountSmallerDateTime1 als "wie viele datetime Werte sind kleiner als es in DateTime1 Spalte" Ich sagte CountSmallerDateTime2 wie "wie viele datetimestamps sind kleiner als ein datetime Stempel für den gleichen Datensatz (in der gleichen Zeile) in Spalte DateTime2", Ähnlichkeit, CountSmallerDateTime3 für DateTime3. Dann habe ich eine Anfrage für Ihre Anfrage:

SELECT [DateTime1] 
    ,[DateTime2] 
    ,[DateTime3] 
    ,(SELECT COUNT(1) 
    FROM [TestTB] Sub 
    WHERE TB.[DateTime1] >Sub.[DateTime1]) AS CountSmallerDateTime1 
    ,(
    CASE WHEN TB.[DateTime2] > TB.[DateTime1] AND TB.[DateTime2] > TB.[DateTime3] THEN 
     2 
     WHEN ((TB.[DateTime2] <= TB.[DateTime1] AND TB.[DateTime2] > TB.[DateTime3]) 
      OR (TB.[DateTime2] > TB.[DateTime1] AND TB.[DateTime2] <= TB.[DateTime3])) THEN 
      1 
    ELSE 
     0 
    END 
) AS CountSmallerDateTime2, 
    (
    CASE WHEN TB.[DateTime3] > TB.[DateTime1] AND TB.[DateTime3] > TB.[DateTime2] THEN 
     2 
     WHEN ((TB.[DateTime3] <= TB.[DateTime1] AND TB.[DateTime3] > TB.[DateTime2]) 
      OR (TB.[DateTime3] > TB.[DateTime1] AND TB.[DateTime3] <= TB.[DateTime2])) THEN 
      1 
    ELSE 
     0 
    END 
) AS CountSmallerDateTime3 FROM [TestTB] TB 
0
;WITH CTE(DATE1, DATE2, DATE3,RN) 
AS 
(
SELECT CONVERT(DATETIME , '2016-05-01 13:24:000.00'), CONVERT(DATETIME,'2016-05-01 15:24:000.00'), CONVERT(DATETIME,'2016-05-01 16:20:000.00'),1 
UNION ALL 
SELECT CONVERT(DATETIME , '2016-05-01 13:30:000.00'), CONVERT(DATETIME,'2016-05-01 14:21:000.00'), CONVERT(DATETIME,'2016-05-01 15:10:000.00'),2 
UNION ALL 
SELECT CONVERT(DATETIME , '2016-05-01 14:24:000.00'), CONVERT(DATETIME,'2016-05-01 17:21:000.00'), CONVERT(DATETIME,'2016-05-01 18:10:000.00'),3 
) 
SELECT  RANK() OVER (ORDER BY DATE1) -1 AS SAME_COLUMN_DATE1 
     , RANK() OVER (ORDER BY DATE2) -1 AS SAME_COLUMN_DATE2 
     , RANK() OVER (ORDER BY DATE3) -1 AS SAME_COLUMN_DATE3 

     , CASE WHEN RN=1 AND DATE1< DATE2 AND DATE1<DATE3 THEN 0 
       WHEN RN=1 AND DATE1< DATE2 AND DATE1>DATE3 THEN 1 
       WHEN RN=1 AND DATE1> DATE2 AND DATE1<DATE3 THEN 1 
       ELSE 2 
       SAME_ROW_1 

     , CASE WHEN RN=2 AND DATE2< DATE1 AND DATE2<DATE3 THEN 0 
       WHEN RN=2 AND DATE2< DATE1 AND DATE2>DATE3 THEN 1 
       WHEN RN=2 AND DATE2> DATE1 AND DATE2<DATE3 THEN 1 
       ELSE 2 
       END SAME_ROW_2 

     , CASE WHEN RN=3 AND DATE3< DATE1 AND DATE3<DATE2 THEN 0 
       WHEN RN=3 AND DATE3< DATE1 AND DATE3>DATE2 THEN 1 
       WHEN RN=3 AND DATE3> DATE1 AND DATE3<DATE2 THEN 1 
       ELSE 2 
       END SAME_ROW_3   
     FROM CTE ORDER BY RN 
Verwandte Themen