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

Tối đa trong một khung thời gian với các ngày trùng lặp

Nếu tôi hiểu đúng, bạn muốn đếm mục nhập riêng biệt cho một trạng thái cụ thể trong khoảng thời gian của mình ... nếu đúng như vậy, bạn nên sử dụng DISTINCT mệnh đề trong count() của bạn thay đổi từ count (*) thành count (Entry_id riêng biệt)

with c (Status_Id, Entry_Id, Start_Date) AS (
  select Status_Id, Entry_Id, Start_Date from tbl where
  (End_Date BETWEEN '19000101' AND '21000101')
  AND ((Start_Date BETWEEN '19000101' AND '21000101')
  OR End_Date <= '21000101'))
select Status_Id, count(distinct Entry_Id) as cnt from 
 (select Entry_Id, max(start_date) as start_date from c
  group by Entry_Id) d inner join
c on c.Entry_Id = d.Entry_Id
and c.start_date = d.start_date
GROUP BY Status_Id WITH ROLLUP

CHỈNH SỬA

Miễn là bạn không quan tâm trạng thái nào được trả về cho một mục nhập nhất định, tôi nghĩ bạn có thể sửa đổi truy vấn bên trong để trả về Trạng thái đầu tiên và kết hợp cả trạng thái đó

with c (Status_Id, Entry_Id, Start_Date) AS (
  select Status_Id, Entry_Id, Start_Date from tbl where
  (End_Date BETWEEN '19000101' AND '21000101')
  AND ((Start_Date BETWEEN '19000101' AND '21000101')
  OR End_Date <= '21000101'))
select c.Status_Id, count(c.Entry_Id) as cnt from 
 (select Entry_Id, Start_Date, (select top 1 Status_id from c where Entry_Id = CC.Entry_Id and Start_Date = CC.Start_Date) as Status_Id
  from (select Entry_Id, max(start_date) as start_date from c
  group by Entry_Id) as CC) d inner join
c on c.Entry_Id = d.Entry_Id
and c.start_date = d.start_date
and c.status_id = d.status_id
GROUP BY c.Status_Id

Kết quả

Status_id Count
 489       2
 492       1
 495       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. Lưu trữ công thức (phương trình) trong cơ sở dữ liệu để đánh giá sau (SQL Server 2005)

  2. Lấy lược đồ cho một bảng

  3. Làm cách nào để bạn tạo các mẫu thủ tục được lưu trữ SQL Server 2005 trong SQL Server 2005 Management Studio?

  4. Làm cách nào để sao lưu cơ sở dữ liệu SQL Server từ xa vào ổ đĩa cục bộ?

  5. Thêm phần chênh lệch múi giờ vào giá trị datetime2 trong SQL Server (T-SQL)