Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL - Jak mogę wysłać zapytanie o ponowne przyjęcie w TSQL?

Oto początek:

sqlfiddle

nowe skrzypce

Pobiera każdą wizytę dla każdego UID w kolejności admitDT, a następnie łączy każdą wizytę z następną wizytą w tym wyniku. Jeśli bieżąca data przyjęcia przypada między ostatnią datą zakończenia a 30 dniami od tej daty, wybierz ją. Są jednak pewne dziwne punkty - wykazano, że UID 1 został przyjęty 12.06.2012 i nigdy nie został zwolniony, ale został ponownie przyjęty 20.06.2013 i został zwolniony tego samego dnia.

edit:nieco zmieniono strukturę, aby zmniejszyć liczbę połączeń

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

Wyniki :

| 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generuj ciąg skrótu MD5 za pomocą T-SQL

  2. Problemy z użyciem ROW_NUMBER() OVER (PARTITION BY...)

  3. Prosty przewodnik po tym, jak używać podzapytań w SQL Server

  4. Jak przekazać zmienną null do procedury składowanej SQL z kodu C#.net?

  5. Jak zmienić hasło sa w SQL Server 2008 express?