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;