2016-06-21 203 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是最大的时间。