Sql 选择“最大日期”我不想要结果

Sql 选择“最大日期”我不想要结果,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,结果 SELECT mat.matid, MAX (to_date(to_char (matdatetable.matdateupdate,'yyyy-mm-dd'),'yyyy-mm-dd')), mat.matuserid, mat.matname, mat.matprice FROM matdatetable LEFT JOIN mat ON matdatetable.sourceid = mat.matid 但是我想。结果 matid matdate update

结果

SELECT
mat.matid,
MAX (to_date(to_char (matdatetable.matdateupdate,'yyyy-mm-dd'),'yyyy-mm-dd')),
mat.matuserid,
mat.matname,    
mat.matprice    
FROM
matdatetable
LEFT JOIN mat ON matdatetable.sourceid = mat.matid
但是我想。结果

matid   matdate update      matuserid    matname   matprice
-------------------------------------------------------------    
1       2012-01-01 0:0:0:0  0111-1       aaa       100
1       2012-08-01 0:0:0:0  0111-1       aaa       125
1       2013-08-30 0:0:0:0  0111-1       aaa       150
2       2012-01-01 0:0:0:0  0222-1       bbb       130
2       2012-08-21 0:0:0:0  0222-1       bbb       110
2       2013-07-30 0:0:0:0  0222-1       bbb       100
3       2012-01-01 0:0:0:0  0565-1       ccc       100
3       2013-09-30 0:0:0:0  0565-1       ccc       230
根据
sourceid
为您提供最新的(根据
matdateupdate
)条目。你的问题不清楚你到底想要什么

使用
sourceid
而不是
matid
,因为您有一个
左连接
matid
可能为空。或者您对左连接的使用不正确

有关此相关答案中的
不同的解释:


t.matdateupdate::date
将您的(假设缺少信息)强制转换为
date
。那似乎是你想要的。如果您确实需要冗余时间
00:00
,请改用。

下次,请提供您的表定义、Postgres版本以及您想要的确切定义。
matid     matdate update    matuserid    matname   matprice
------------------------------------------------------------------
1       2013-08-30 0:0:0:0  0111-1       aaa       150
2       2013-07-30 0:0:0:0  0222-1       bbb       100
3       2013-09-30 0:0:0:0  0565-1       ccc       230
SELECT DISTINCT ON (1)
       t.sourceid AS matid
      ,t.matdateupdate::date AS matdate_update
      ,m.matuserid
      ,m.matname   
      ,m.matprice
FROM   matdatetable t
LEFT   JOIN mat m ON m.matid = t.sourceid
ORDER  BY 1, t.matdateupdate DESC;