2016-06-21 209 views
1

所以我有2個表格。第一臺被命名爲「名」:SQL:使用MAX選擇最新的數據時間

| uploadID | Name | Freq | 
--------------------------- 
| upload123 | A | 12 | 
| upload345 | A | 12 | 
| upload678 | A | 12 | 

和第二個被評爲「上載」:

| uploadID | uploadDate | uploadTime | 
--------------------------------------- 
| upload123 | 2016-03-05 | 17:04:33 | 
| upload345 | 2016-03-05 | 13:05:00 | 
| upload678 | 2016-02-03 | 12:12:12 | 

我想做一個查詢的一個具有最新的日期和時間。預期結果爲:

| uploadID | Name | Freq | 
--------------------------- 
| upload123 | A | 12 | 

因爲upload123有最新的日期和時間。 我試過了:

SELECT * from name 
join upload 
on name.upload id =upload=upload id 
where uploadDate = (SELECT MAX(upload.uploadDate) from upload) 
and uploadTime =(SELECT MAX(upload.uploadTime) from upload) 

它沒有結果。但是,當我不使用uploadTime,它的工作原理,但返回我2行具有相同的日期。我想我在使用聚合函數MAX來uploadDate時犯了一個錯誤。但我無法弄清楚。進出口使用PostgreSQL和uploadTime的數據類型爲TIME

回答

1

只需使用ROW_NUMBER()

SELECT * FROM (
    SELECT t.*,s.*, 
      ROW_NUMBER() OVER(PARTITION BY t.upload_id ORDER BY s.uploadDate DESC,s.uploadTime DESC) as rnk 
    FROM name t 
    JOIN upload s 
    ON(t.upload_id = s.upload_id)) p 
WHERE p.rnk = 1 

與您的查詢的問題是,最大time沒有necessarely屬於最大date

| upload123 | 2016-03-05 | 17:04:33 | 
| upload345 | 2016-02-05 | 18:05:00 | 

這裏2016-03-05是最大日期,18:05:00是最大的時間。