Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn SQL Server xác định dữ liệu bị thiếu cho các ngày cụ thể

Bạn có thể sử dụng Bảng thống kê để tạo tất cả các kết hợp của DateUnit . Sau khi bạn nhận được tất cả các kết hợp, bạn có thể sử dụng NOT EXISTS để lấy dữ liệu còn thiếu.

SQL Fiddle

DECLARE @minDate AS DATE
DECLARE @maxDate AS DATE

SELECT
    @minDate = MIN([Date]),
    @maxDate = MAX([Date])
FROM TestData


;WITH E1(N) AS(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b),
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b),
Tally(N) AS(
    SELECT TOP(DATEDIFF(DAY, @minDate, @maxDate) + 1)
        ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
    FROM E4
),
CteDatesAndUnits([Date], Unit) AS(
    SELECT
        DATEADD(DAY, t.N - 1, @minDate),
        u.Unit
    FROM Tally t
    CROSS JOIN (
        SELECT DISTINCT Unit FROM TestData
    )u
)
SELECT *
FROM CteDatesAndUnits c
WHERE NOT EXISTS(
    SELECT * 
    FROM TestData
    WHERE
        [Date] = c.[Date]
        AND Unit = c.Unit
)

Kết quả

|       Date |   Unit |
|------------|--------|
| 2012-01-01 | Unit B |
| 2012-01-02 | Unit A |
| 2012-01-02 | Unit B |

Kể từ Unit sẽ luôn là Unit AUnit B , bạn có thể thay thế dòng này:

SELECT DISTINCT Unit FROM TestData

với cái này:

SELECT 'Unit A' AS Unit UNION ALL SELECT 'Unit B'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng Chuyển chuỗi được phân tách bằng dấu phẩy trong truy vấn động trong SQL

  2. Chúng tôi có thể từ chối xóa khỏi các bảng cụ thể không?

  3. Trọng lượng / số lượng dân số Hamming trong T-SQL

  4. Cách sao lưu tệp SQL Server 2014 Express Localdb (.mdf) theo chương trình

  5. Làm thế nào để Tìm các Hàng trùng lặp bởi một khóa nhưng không trùng lặp trong tất cả các cột?