【问题标题】:SQL : choose newest time for data using MAXSQL:使用 MAX 选择数据的最新时间
【发布时间】:2016-06-21 07:50:05
【问题描述】:

所以我有 2 张桌子。第一个表被命名为“name”:

| 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 上传日期时犯了一个错误。但我想不通。我使用的是 postgreSQL,uploadTime 的数据类型是 TIME

【问题讨论】:

    标签: postgresql join time nested max


    【解决方案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 不一定属于最大的date

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

    这里2016-03-05是最大日期,18:05:00是最大时间。

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2012-03-25
      • 2013-07-12
      相关资源
      最近更新 更多