2017-07-20 148 views
0

我有一個名爲'Name','Product','Value','Update Date'的列的表。我想要一個SQL語句來選擇列'Name','Product','Value'的唯一值,但這樣做的方式是按最近到最近的'更新日期'排序。SQL查詢SELECT DISTINCT WHERE BY

如果我返回這樣的SQL select語句的輸出,我可以很容易地得到,比方說三個名稱或三個產品,三個值,它們有最新的更新。有我可以使用的SQL語句嗎?

我正在考慮爲每個列提供單獨的SQL語句:'Name','Product','Value'。並且有一個ORDER BY語句。有什麼想法嗎?

+0

** [編輯] **你的問題,並添加基於該數據的一些樣本數據和預期輸出。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload圖像-的代碼上那麼當-要價-A-問題/ 285557#285557)。請勿在註釋中張貼代碼或其他信息 –

+0

您正在使用哪個[DBMS](https://en.wikipedia.org/wiki/Database)? Postgres的?甲骨文? DB2?火鳥? –

回答

2

你需要切換到一個聚合得到最大的日期進行排序:

select Name, Product, Value 
from tab 
group by Name, Product, Value 
order by MAX(UpdateDate) desc 
+0

謝謝!只是爲了澄清,此查詢將獲得由具有最大UpdateDate的列Name,Product和Value組成的唯一條目。如果我希望唯一條目不是由三列(名稱,產品,價值)組成,而是由名稱單獨或產品單獨或價值單獨組成,那麼我需要單獨執行單獨的陳述嗎?如:從選項卡組中按名稱排序按名稱排序按MAX(UpdateDate)desc,按產品排序按MAX(UpdateDate)desc,....等等從選項卡組中選擇產品 – Diana

+1

@Diana:是的,它返回唯一的'名稱,產品,價值* *組合*並按最新的'UpdateDate'排序。如果你想爲每一個單獨的列,你將需要三個選擇加'UNION ALL'。 – dnoeth