Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете MIN и MAX дата за прекъснат период от време ГГГГММ00

Това е вид проблем с пропуски и острови. Разрешим е дори в неподдържан стар софтуер като SQL Server 2005, защото тази версия има row_number() .

Един трик е преобразуването на идентификатора на часа в добросъвестен Време за среща. Другият трик е да дефинирате групите, като извадите поредния брой месеци от стойността за дата/час:

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);

Тук е db<>цигулка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL заявка:Как мога да получа данни от ред с номер 1000 директно?

  2. mysql еквивалентни типове данни

  3. Експортиране на резултатите от заявката във файл в движение

  4. Отстраняване на грешки в дълъг динамичен sql в SQL Server 2008

  5. Свържете R към машина за база данни на SQL Server