sql >> Database teknologi >  >> RDS >> Sqlserver

SQL - Hvordan forespørger jeg om genoptagelse i TSQL?

Her er en start:

sqlfiddle

ny violin

Den får hvert besøg for hver UID i rækkefølge efter admitDT, og parrer derefter hvert besøg med det næste besøg i det resultat. Hvis den aktuelle indlæggelsesdato er mellem den sidste udskrivningsdato og 30 dage derefter, skal du vælge den. Der er dog nogle mærkelige punkter - UID 1 er vist at være indlagt den 6/12/2012 og aldrig udskrevet, men så indlagt igen den 20/6/2013 og udskrevet samme dag.

edit:omstruktureret lidt for at reducere antallet af joinforbindelser

WITH cte AS (
  SELECT visitid,uid,dischargedt,admitdt,
    row_number()over(partition BY uid ORDER BY admitdt) AS r
  FROM t
  )
SELECT
c1.visitid AS v1, c2.visitid AS v2,
c1.uid,
c1.dischargedt as [Discharged from first visit],
c2.admitdt as [Admitted to next visit]
FROM cte c1
INNER JOIN cte c2 ON c1.uid=c2.uid
WHERE c1.visitid<>c2.visitid
AND c1.r+1=c2.r
AND c2.admitdt BETWEEN c1.dischargedt AND dateadd(d,30,c1.dischargedt )
ORDER BY c1.uid
 

Resultater :

| V1 | V2 | UID | DISCHARGED FROM FIRST VISIT | ADMITTED TO NEXT VISIT | |----|----|-----|-----------------------------|-----------------------------| | 25 | 38 | 2 | June, 11 2013 16:13:00+0000 | June, 12 2013 10:10:00+0000 | | 38 | 12 | 2 | June, 12 2013 10:10:00+0000 | June, 17 2013 06:51:00+0000 | | 18 | 34 | 3 | June, 11 2013 12:08:00+0000 | June, 12 2013 08:40:00+0000 | | 21 | 22 | 3 | June, 12 2013 14:40:00+0000 | June, 13 2013 10:00:00+0000 | | 22 | 16 | 3 | June, 14 2013 12:00:00+0000 | June, 19 2013 04:48:00+0000 |

  1. Hvordan man laver Mysql JDBC-driver til android studio

  2. MySQL Forbered erklæring - Maksimal længde 1000 tegn

  3. Vælg rækker fra en MySQL-tabel, hvor værdien er en matrix?

  4. Forståelse af selvtilslutning