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

Отпечатване на текущата стойност и предишната стойност между диапазона от дати

Нещо като следното трябва да работи:

SELECT ID, Date, Time, Status
 from (select ID, Date, Time, Status, row_number() over (order by Date) Ranking
        from MyTable
        where ID = @SearchId
         and Date <= @SearchDate) xx
 where Ranking < 3
 order by Date, Time

Това ще върне най-много два реда. Не е ясно дали използвате колони с данни за дата и час, или всъщност използвате запазени думи като имена на колони, така че ще трябва да се суете с това. (Изоставих времето, но можете лесно да го добавите към различните подреждания и филтри.)

Като се имат предвид ревизираните критерии, става малко по-сложно, тъй като включването или изключването на ред зависи от стойността, върната в различен ред. Тук „вторият“ ред, ако има два или повече реда, се включва само ако „първият“ ред е равен на определена стойност. Стандартният начин да направите това е да направите запитване към данните, за да получите максималната стойност, след което да го направите отново, докато препращате към резултата от първия набор.

Въпреки това можете да правите много гадни неща с row_number. Работете върху това:

SELECT ID, Date, Time, Status
 from (select
          ID, Date, Time, Status
         ,row_number() over (partition by case when Date = @SearchDate then 0 else 1 end
                             order by     case when Date = @SearchDate then 0 else 1 end
                                         ,Date) Ranking
        from MyTable
        where ID = @SearchId
         and Date <= @SearchDate) xx
 where Ranking = 1
 order by Date, Time

Ще трябва да разрешите проблема с датата/часа, тъй като това работи само срещу дати.



  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 Server

  2. SQL Server INFORMATION_SCHEMA Изгледи | Вижте дали таблица съществува

  3. Как да изчистя буфера PRINT в TSQL?

  4. T-SQL Как да създавам динамично таблици в съхранени процедури?

  5. CASE (съдържа), а не равенство