Вопрос по sql – SQL Выберите новейшие записи, которые имеют отдельный столбец Имя

29

Я искал вокруг, и я нашел это SQL выбирает строки по самой последней дате Что так близко к тому, что я хочу, но я не могу заставить его работать.
Я получаю сообщение об ошибке "Идентификатор столбца" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Я хочу самую новую строку по дате для каждого отдельного имени

Select ID,Name,Price,Date
From  table
Group By Name
Order By Date ASC

Вот пример того, что я хочу

         Table
ID| Name | Price |   Date
---------------------------------
0 |  A   |  10   | 2012-05-03
1 |  B   |   9   | 2012-05-02
2 |  A   |   8   | 2012-05-04
3 |  C   |  10   | 2012-05-03
4 |  B   |   8   | 2012-05-01

желаемый результат

ID| Name | Price |   Date
------------------------------
2 |  A   |   8   | 2012-05-04
3 |  C   |  10   | 2012-05-03    
1 |  B   |   9   | 2012-05-02

Я использую Microsoft SQL Server 2008

Спасибо за любую помощь или указывает в правильном направлении

Ваш Ответ

4   ответа
-6

Distinct вместоGroup By

Select Distinct ID,Name,Price,Date
From  table
Order By Date ASC

http://technet.microsoft.com/en-us/library/ms187831.aspx

16

о разделите по имени, а затем упорядочите по тому, что вы хотите, чтобы значения, которые вы хотите, в первую позицию.

WITH cte 
     AS (SELECT Row_number() OVER (partition BY NAME ORDER BY date DESC) RN, 
                id, 
                name, 
                price, 
                date 
         FROM   table1) 
SELECT id, 
       name, 
       price, 
       date 
FROM   cte 
WHERE  rn = 1 

DEMO

Обратите внимание, что вы, вероятно, должны добавить идентификатор(partition BY NAME ORDER BY date DESC, ID DESC)  в вашем фактическом запросе в качестве тай-брейка на дату

Error: User Rate Limit Exceeded General Grey
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded General Grey
Error: User Rate Limit Exceededsaid beforeError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded General Grey
50
Select ID,Name, Price,Date
From  temp t1
where date = (select max(date) from temp where t1.name =temp.name)
order by date desc

SQL Fiddle с демо

или, как указывает Конрад, вы можете использовать INNER JOIN:

SELECT t1.ID, t1.Name, t1.Price, t1.Date 
FROM   temp t1 
INNER JOIN 
(
    SELECT Max(date) date, name
    FROM   temp 
    GROUP BY name 
) AS t2 
    ON t1.name = t2.name
    AND t1.date = t2.date 
ORDER BY date DESC 
Error: User Rate Limit Exceededlike thisError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded General Grey
Error: User Rate Limit Exceeded
3
select * from (
    Select
        ID, Name, Price, Date,
        Rank() over (partition by Name order by Date) RankOrder
    From table
) T
where RankOrder = 1

Похожие вопросы