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

Drukowanie aktualnej wartości i poprzedniej wartości między zakresem dat

Powinno działać coś takiego:

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

To zwróci co najwyżej dwa wiersze. Nie jest jasne, czy używasz kolumn z datami typu data i godzina, czy faktycznie używasz zarezerwowanych słów jako nazw kolumn, więc będziesz musiał się z tym bawić. (Pominąłem Czas, ale możesz łatwo dodać to do różnych porządków i filtrów.)

Biorąc pod uwagę zmienione kryteria, staje się to nieco trudniejsze, ponieważ włączenie lub wyłączenie wiersza zależy od wartości zwróconej w innym wierszu. Tutaj „drugi” wiersz, jeśli są dwa lub więcej wierszy, jest uwzględniany tylko wtedy, gdy „pierwszy” wiersz ma określoną wartość. Standardowym sposobem, aby to zrobić, jest zapytanie o dane w celu uzyskania maksymalnej wartości, a następnie ponowne zapytanie, odwołując się do wyniku pierwszego zestawu.

Jednak za pomocą numeru wiersza możesz zrobić wiele gównianych rzeczy. Pracuj nad tym:

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

Musisz rozwiązać problem z datą/godziną, ponieważ działa to tylko w przypadku dat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. COUNT (DISTINCT nazwa_kolumny) Rozbieżność a COUNT (nazwa_kolumny) w programie SQL Server 2008?

  2. Implementacja wyszukiwania pełnotekstowego w SQL Server 2016 dla początkujących

  3. Jak utworzyć ograniczenie sprawdzania wielu tabel?

  4. Sprawdź/zmień poziom zgodności bazy danych w SQL Server (SSMS)

  5. Jak mogę połączyć się z SQL Server 2008 R2 za pomocą django-mssql?