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

Dapatkan semua tanggal antara dua tanggal di SQL Server

Saran pertama saya adalah menggunakan tabel kalender Anda, jika Anda tidak memilikinya, buatlah. Mereka sangat berguna. Permintaan Anda sesederhana:

DECLARE @MinDate DATE = '20140101',
        @MaxDate DATE = '20140106';

SELECT  Date
FROM    dbo.Calendar
WHERE   Date >= @MinDate
AND     Date < @MaxDate;

Jika Anda tidak ingin, atau tidak dapat membuat tabel kalender, Anda masih dapat melakukannya dengan cepat tanpa CTE rekursif:

DECLARE @MinDate DATE = '20140101',
        @MaxDate DATE = '20140106';

SELECT  TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b;

Untuk bacaan lebih lanjut tentang ini, lihat:

  • Menghasilkan satu set atau urutan tanpa loop – bagian 1
  • Menghasilkan satu set atau urutan tanpa loop – bagian 2
  • Menghasilkan satu set atau urutan tanpa loop – bagian 3

Berkenaan dengan kemudian menggunakan urutan tanggal ini dalam kursor, saya sangat menyarankan Anda menemukan cara lain. Biasanya ada alternatif berbasis set yang akan berkinerja jauh lebih baik.

Jadi dengan data Anda:

Tanggal
  date   | it_cd | qty 
24-04-14 |  i-1  | 10 
26-04-14 |  i-1  | 20

Untuk mendapatkan jumlah pada 28-04-2014 (yang saya kumpulkan adalah kebutuhan Anda), Anda sebenarnya tidak memerlukan hal-hal di atas, Anda cukup menggunakan:

SELECT  TOP 1 date, it_cd, qty 
FROM    T
WHERE   it_cd = 'i-1'
AND     Date <= '20140428'
ORDER BY Date DESC;

Jika Anda tidak menginginkannya untuk item tertentu:

SELECT  date, it_cd, qty 
FROM    (   SELECT  date, 
                    it_cd, 
                    qty, 
                    RowNumber = ROW_NUMBER() OVER(PARTITION BY ic_id 
                                                    ORDER BY date DESC)
            FROM    T
            WHERE   Date  <= '20140428'
        ) T
WHERE   RowNumber = 1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengembalikan angka acak sebagai kolom di SQL Server 2005?

  2. Pemicu Masuk di SQL Server

  3. Prosesor AMD EPYC 7002 Series dan SQL Server

  4. Dasar-dasar Pernyataan SQL Server ALTER TABLE

  5. EXP() Contoh di SQL Server