-1
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

但是我要。结果

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
4

1 回答 1

0
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;

为您提供最新的(根据matdateupdate)条目sourceid。你的问题不清楚你到底想要什么。

使用sourceid而不是matid,因为你有一个LEFT JOIN并且matid可能是NULL。或者您的使用LEFT JOIN不正确...

DISTINCT ON在这个相关答案中的解释:
选择每个 GROUP BY 组中的第一行?

t.matdateupdate::date将您的timestamp(假设缺乏信息)转换为date. 这似乎是你想要的。如果您确实需要多余的时间00:00,请datetrunc('day', t.matdateupdate)改用。

于 2013-11-07T05:41:42.437 回答