2008-12-18 78 views
11

雖然這個問題看起來很簡單,但它有點棘手。如何在包含最大值的表中找到記錄?

我有下面的表:

table A: 
    int ID 
    float value 
    datetime date 
    varchar(50) group 

我想獲得「ID」和包含最大「日期」的記載「值」由列「基團」分組。類似於「每組最新值是多少?」

我可以得到每個組和它的最大日期:

SELECT group, MAX(date) FROM A GROUP BY group; -- I also need the "ID" and "value"

但我想有記錄的「ID」和價值最高的日期。

在A和結果之間進行JOIN可能是答案,但無法知道MAX(日期)引用的記錄(以防「日期」重複)。

有人可以幫忙嗎?

回答

8

你可以使用子查詢嘗試

 
select group, id, value, date from A where date in 
(select MAX(date) as date 
    from A 
    group by group) 
order by group 
0

只要日期列是每一組唯一我覺得這樣的事情可能工作:

SELECT A.ID, A.Value 
FROM A 
    INNER JOIN (SELECT Group, MAX(Date) As MaxDate FROM A GROUP BY Group) B 
    ON A.Group = B.Group AND A.Date = B.MaxDate 
+0

它不是唯一 – Jonas 2008-12-18 00:28:21

4

這正是分析功能是作出:

select group, 
     id, 
     value 
from (
     select group, 
       id, 
       value, 
       date, 
       max(date) over (partition by group) max_date_by_group 
     from A 
     ) 
where date = max_date_by_group 
2

如果日期是唯一的,那麼你已經有你的答案。如果日期不是唯一的,那麼你需要一些其他的獨特器。如果沒有自然鑰匙,您的身份證件與任何身份證件一樣好。只要把MAX(或MIN,無論你喜歡)就可以了:

SELECT * 
FROM A 
JOIN (
    --Dedupe any non unqiue dates by getting the max id for each group that has the max date 
    SELECT Group, MAX(Id) as Id 
    FROM A 
    JOIN (
     --Get max date for each group 
     SELECT group, MAX(date) as Date 
     FROM A 
     GROUP BY group 
    ) as MaxDate ON 
     A.Group = MaxDate.Group 
     AND A.Date = MaxDate.Date 
    GROUP BY Group 
) as MaxId ON 
    A.Group = MaxId.Group 
    AND A.Id= MaxId.Id 
相關問題