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

SQL заявка за избор на обекти от таблица с хронология на промените

От това, което прочетох, предполагам, че искате всички компании, които са имали статус 1 във вашия период от време. Ако това е, което искате, това е доста лесно.

Следният израз трябва да свърши работа:

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

Това, което направих, беше да създам вложен изглед с последния статус до края на вашия период от време, така че ако последната промяна на статуса на фирма е 1, тогава тази компания трябва да бъде включена във вашия резултат. Не ни интересуват промени след вашия период от време, така че поставям ограничението във вложения изглед.

Началото на вашия диапазон е незначително за тази заявка. Вероятно ви е трябвало за други цели, да се присъедините към други маси.

Аз съм човек от Oracle, така че мисля, че мога да направя това твърдение много по-добре с помощта на Oracle analytics, но мисля, че ще бъде валидно твърдение за 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. SQL Server:Как да използвам UNION с две заявки, които И ДВЕТЕ имат клауза WHERE?

  2. T-SQL за изброяване на всички съпоставяния на потребители с роли/разрешения за база данни за влизане

  3. Какъв тип данни трябва да използвам за съхраняване на парични стойности?

  4. Размисли за сигурността на SQL Server

  5. Пример за прост оператор за сливане в SQL Server