SSMS
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> SSMS

Làm thế nào để có được sự chênh lệch thời gian tối đa giữa 2 hàng liên tiếp bất kỳ trên mỗi giá trị?

Thay vào đó chúng ta có thể sử dụng LAG / LEAD không?

SELECT MAX(diff_sec) FROM
(
  SELECT 
    DATEDIFF(
        SECOND,  
        CreateDT,
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) --next row's createdt
    ) as diff_sec
  FROM Occs
)x

LEAD sẽ chọn CreateDT tiếp theo (tiếp theo được xác định bởi "hàng có cùng mã và CreateDt tạm thời lớn hơn đầu tiên sau CreateDT của hàng hiện tại") so với hàng hiện tại. DATEDIFF nhận chênh lệch tính bằng giây (chọn khung thời gian phù hợp). Nó cần bao bọc trong một truy vấn con (hoặc CTE nếu bạn thích) vì hàm cửa sổ LEAD không thể xuất hiện bên trong MAX

Tất nhiên, nó có thể không đặc biệt hữu ích .. Cũng có thể thêm vào mã:

SELECT x.code, MAX(x.diff_sec) FROM
(
  SELECT 
    code,
    DATEDIFF(
        SECOND,  
        CreateDT,
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) --next row's createdt
    ) as diff_sec
  FROM Occs
)x
GROUP BY x.code



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Hạn chế cột varchar () ở các giá trị cụ thể?

  2. Tùy chỉnh Mẫu SSMS 2008 'Thủ tục được Lưu trữ Mới' mặc định

  3. CTRL + R không ẩn cửa sổ Kết quả Truy vấn trong SSMS

  4. System.OutOfMemoryException xảy ra thường xuyên sau khi nâng cấp SQL Server 2016 lên phiên bản 13.0.15700.28

  5. Làm cách nào để nhóm cơ sở dữ liệu trong các thư mục trong SQL Server Management Studio?