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

Zapytanie SQL do wybierania jednostek z tabeli zmian historii

Z tego, co przeczytałem, zakładam, że chcesz, aby wszystkie firmy, które miały status 1, mieściły się w Twoim zakresie dat. Jeśli tego chcesz, to całkiem proste.

Poniższe stwierdzenie powinno załatwić sprawę :

SELECT C.* FROM COMPANY C LEFT JOIN ( SELECT H.STATUS, H.COMPANY_ID FROM COMPANYSTATUS H WHERE H.STATUS_EFFECTIVE_DATE = (SELECT MAX(H1.STATUS_EFFECTIVE_DATE) FROM COMPANYSTATUS H1 WHERE H1.COMPANY_ID = H.COMPANY_ID AND H1.STATUS_EFFECTIVE_DATE <= '20171231' ) CH ON CH.COMPANY_ID = C.ID WHERE ( C.STATUS = 1 AND CH.COMPANY_ID IS NULL ) -- CASE #1 : STATUS = 1 AND NEVER CHANGED (NO HISTORY) OR H.STATUS = 1

To, co zrobiłem, to utworzenie zagnieżdżonego widoku z ostatnim statusem do końca zakresu dat, więc jeśli ostatnia zmiana statusu firmy to 1, to ta firma powinna zostać uwzględniona w wyniku. Nie interesują nas zmiany po Twoim zakresie dat, więc umieszczam ograniczenie w widoku zagnieżdżonym.

Początek twojego zakresu jest nieistotny dla tej prośby. Prawdopodobnie potrzebowałeś do innych celów, aby dołączyć do innych stołów.

Jestem gościem od Oracle, więc myślę, że Ι mógłby uczynić to stwierdzenie znacznie lepszym, używając analityki Oracle, ale myślę, że będzie to prawidłowe stwierdzenie dla serwera SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przenieść tabelę do innej grupy plików w MS SQL Server?

  2. Wybór COUNT(*) z DISTINCT

  3. Nazwa kolumny jako parametr w instrukcji INSERT

  4. SQL Server 2008 — kolumna obliczeniowa HashBytes

  5. T-SQL — aliasowanie przy użyciu =kontra as