2015-06-10 37 views
0

從表中選擇最新的結果,我有如下表:使用SQL查詢

Data Table

select聲明我要的是每個policy最新的唯一行(綠色)。部分原因policy信息將從前一天(所有policies將不會在同一天發佈)。

在這種情況下,ACB1已將她的last namesamounts更改。

+1

你嘗試什麼SQL查詢到目前爲止,什麼是輸出? – sfrutig

回答

2

這將通過ID列獲得每個策略的最新行:

SELECT id, policy, first, last, amount, created 
    FROM yourtable yt 
      INNER JOIN 
      (SELECT policy,MAX(id) as id 
      FROM yourtable 
GROUP BY policy) maxid ON yt.policy = maxid.policy 
            AND yt.id = maxid.id 
1

使用row_number窗函數:

select * from 
    (select *, row_number() over(partition by policy order by id desc) rn from TableName) t 
where rn = 1 
+0

我會使用這種技術,因爲它更清晰。另外,我們應該檢查這個查詢的執行計劃和被接受的答案的執行計劃,但我相信這應該會帶來更好的性能。 – gotqn

0

也許,如果,而不是從數據庫中選擇所有字段,你做一個where ID=MAX()選擇最大的ID。

所以你會:

SELECT `id`,`firstname`,`lastname`,`policy`,`amount`,`created` 
FROM `tablename` WHERE `id`=MAX()