Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kelompokkan baris dengan jarak kurang dari 15 hari dan tetapkan tanggal min/maks

Seperti yang disebutkan dalam komentar, Anda dapat menggunakan LAG fungsi untuk ini. Ide dasarnya adalah untuk menetapkan nilai 0/1 untuk setiap baris:jika dalam 15 hari dari baris sebelumnya maka 0 yang lain 1. Kemudian gunakan SUM() OVER () untuk mengonversi angka 1 dan 0 menjadi angka yang dapat digunakan untuk pengelompokan.

Perhatikan bahwa ini dapat mengelompokkan rentang tanggal yang lebih panjang, mis. 01-01 , 01-11 , 01-21 , 02-01 dan 02-11 akan dikelompokkan bersama meskipun tanggal pertama dan terakhir terpisah lebih dari 15 hari.

DECLARE @T TABLE (HASTA_ID INT, PROTOKOL_ID INT, STARTDATE DATE, ENDDATE DATE);
INSERT INTO @T VALUES
(273065, 11, '2018-01-24', '2018-01-30'),
(273065, 12, '2018-01-25', '2018-02-10'),
(273065, 13, '2018-01-30', '2018-01-30'),
(273065, 14, '2018-02-23', '2018-02-28'),
(273065, 15, '2018-03-21', '2018-03-29'),
(273065, 16, '2018-05-03', '2018-05-04'),
(273065, 17, '2018-05-03', '2018-05-08'),
(273065, 18, '2018-05-14', '2018-05-22'),
(273065, 19, '2018-05-22', '2018-05-23'),
(273065, 20, '2018-09-20', '2018-09-30');

WITH CTE1 AS (
    SELECT *, CASE WHEN LAG(STARTDATE) OVER (PARTITION BY HASTA_ID ORDER BY STARTDATE) >= DATEADD(DAY, -14, STARTDATE) THEN 0 ELSE 1 END AS CHG
    FROM @T
), CTE2 AS (
    SELECT *, SUM(CHG) OVER (PARTITION BY HASTA_ID ORDER BY STARTDATE) AS GRP
    FROM CTE1
)
SELECT *,
    MIN(STARTDATE) OVER (PARTITION BY HASTA_ID, GRP) AS EX_STARTDATE,
    MAX(ENDDATE) OVER (PARTITION BY HASTA_ID, GRP) AS EX_ENDDATE
FROM CTE2
ORDER BY HASTA_ID, STARTDATE

Demo di DB Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah Mengakhiri Penggunaan menutup Koneksi SQL yang terbuka

  2. Bagaimana cara mendapatkan daftar kolom dalam tabel atau tampilan?

  3. Bagaimana cara mendapatkan hasil ekspor dalam format CSV nyata di SQL Server Management Studio?

  4. Cara Mengunduh file yang disimpan dalam SQL DB dalam Format Biner

  5. Membandingkan kombinasi Induk-anak dari 2 tabel berbeda di SQL Server