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

SQL заявка за получаване на най-новата цена

Мисля, че единственото решение с вашата структура на таблицата е да работите с подзаявка:

SELECT *
   FROM Thing
   WHERE ID IN (SELECT max(ID) FROM Thing 
                   WHERE ThingID IN (1,2,3,4)
                   GROUP BY ThingID)

(Даденият най-висок ID означава и най-новата цена)

Въпреки това ви предлагам да добавите колона „IsCurrent“, която е 0, ако не е най-новата цена, или 1, ако е най-новата. Това ще добави възможния риск от непоследователни данни, но ще ускори много целия процес, когато таблицата стане по-голяма (ако е в индекс). Тогава всичко, което трябва да направите, е да...

SELECT *
   FROM Thing
   WHERE ThingID IN (1,2,3,4)
     AND IsCurrent = 1

АКТУАЛИЗАЦИЯ

Добре, Маркус актуализира въпроса, за да покаже, че ID е уникален идентификатор, а не int. Това прави писането на заявката още по-сложно.

SELECT T.* 
   FROM Thing T
   JOIN (SELECT ThingID, max(PriceDateTime)
            WHERE ThingID IN (1,2,3,4)
            GROUP BY ThingID) X ON X.ThingID = T.ThingID 
                                AND X.PriceDateTime = T.PriceDateTime
   WHERE ThingID IN (1,2,3,4)

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

(Знам, че ThingID в долната част е излишен. Просто опитайте дали е по-бърз с или без това „WHERE“. Не съм сигурен коя версия ще бъде по-бърза, след като оптимизаторът свърши работата си.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DEGREES() Примери в SQL Server

  2. Заявка за проверка на индекс в таблица

  3. SQL Server Dynamic Pivot в UDF, който връща таблица

  4. SQL Server:XPATH заявката е неуспешна

  5. Променете формата на датата за текущата сесия в SQL Server