所以我有2个表。第一张表被命名为"名称":
| 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)
它没有任何结果。但是,当我不使用上传时间时,它可以工作,但以同一日期返回我2行。我认为我在使用汇总函数最大上传时犯了一个错误。但是我无法弄清楚。我正在使用PostgreSQL,并且上传时间的数据类型为Time
只需使用 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
不必属于最大date
。
| upload123 | 2016-03-05 | 17:04:33 |
| upload345 | 2016-02-05 | 18:05:00 |
这里2016-03-05
是最大日期,18:05:00
是最大时间。