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

Tìm ngày MIN và MAX trong một khoảng thời gian không liên tục YYYYMM00

Đây là một dạng vấn đề về khoảng trống và đảo. Nó có thể giải quyết được ngay cả trong phần mềm cổ không được hỗ trợ như SQL Server 2005, vì phiên bản đó có row_number() .

Một thủ thuật là chuyển đổi id thời gian thành thực tế ngày giờ. Một thủ thuật khác là xác định các nhóm bằng cách trừ một số tháng liên tiếp cho giá trị ngày / giờ:

select player, team, min(timeid), max(timeid)
from (select lp.*,
             row_number() over (partition by player, team order by timeid) as seqnum,
             cast(cast(timeid + 1 as varchar(255)) as datetime) as yyyymm
      from logplayer lp
     ) lp
group by player, team, dateadd(month, - seqnum, yyyymm)
order by player, team, min(timeid);

Tại đây là một 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. Thực thi SQL trực tiếp; không có con trỏ., trạng thái SQL 01000 trong SQLExecDirect

  2. Nhóm luôn sẵn sàng của SQL Server:Cài đặt và cấu hình, Phần 1

  3. SQL Server Thay thế lệnh bằng WIldcard

  4. Lưu trữ HTML trong SQL Server

  5. Chỉ mục SQL Server nên được phân cụm?