Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znalezienie mediany między DWOMA datami SQL Server 2008

Jeśli masz na myśli zestaw dat rozpoczęcia i zakończenia, a następnie umieść je w jednej kolumnie:

WITH t AS (
       SELECT invoice_no, invoice_start_date, invoice_end_date, check_date, status_code,
       FROM INVOICE_HEADER INNER JOIN
            INVOICE_HEADER_CUSTOM
            ON INVOICE_HEADER.invoice_id = INVOICE_HEADER_CUSTOM.invoice_id
       WHERE status_code <> 'REJECTED' AND 
             Check_Date BETWEEN CONVERT(DATETIME, '2014-12-01 00:00:00', 102) AND
             CONVERT(DATETIME, '2014-12-31 00:00:00', 102)
     ), 
     t2 as (
      select d, row_number() over (order by d) as seqnum,
             count(*) over () as cnt
      from (select invoice_start_date as d from t
            union all
            select invoice_end_date as d from t
           ) t
     )
select dateadd(day, datediff(hour, min(d), max(d)) / 2.0, min(d))
from t2
where 2 * seqnum in (cnt, cnt + 1, cnt + 2);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuwanie bazy danych SQL Server za pomocą C#

  2. Wydajne zapytanie do podzielenia rozdzielanej kolumny na oddzielną tabelę

  3. Scal zduplikowane rekordy czasowe w bazie danych

  4. Wyniki SSMS do siatki - CRLF nie zachowane w kopiowaniu/wklejaniu - jakieś lepsze techniki?

  5. Czy unikalny klucz serwera SQL jest również indeksem?