从查询PostgreSQL中获取第一次出现的数据

时间:2019-05-02 18:45:58

标签: postgresql

我们有一个具有item_numbers的系统,并扫描这些项目号。 我需要一个查询,该查询返回每个项目的第一个扫描记录。

SELECT  item_number, dis.scan_datetime, dli.item_sequence_no
FROM distribution_stop_information dsi 
join distribution_line_items dli on dsi.unique_id_no = dli.unique_id_no 
join distribution_item_scans dis on stop_unique_id_no = dli.unique_id_no
WHERE dis.scan_type = 9 and (dli.item_sequence_no = dis.item_sequence_no )  and
dsi.unique_id_no = 245769

这将返回一个数据集,其中包括每个项目的每次扫描的记录:

  

“ 132275190501001”“ 2019-05-02 06:07:44”“ 1”

     

“ 132275190501001”“ 2019-05-02 07:04:42”“ 1”

     

“ 089275190501001”“ 2019-05-02 06:07:54”“ 2”

     

“ 089275190501001”“ 2019-05-02 07:04:52”“ 2”

所以我需要上面的返回是第一项的第一次扫描,第二项的第一次扫描,等等...

1 个答案:

答案 0 :(得分:0)

解决方案是使用'distinct on'两个字段,同时更改我的联接。

SELECT distinct on (dis.item_sequence_no, item_number) item_number, dis.scan_datetime
FROM distribution_stop_information dsi 
join distribution_line_items dli on dsi.unique_id_no = dli.unique_id_no 
join distribution_item_scans dis on stop_unique_id_no = dli.unique_id_no
WHERE (dis.scan_type = 2) and (dli.item_sequence_no = dis.item_sequence_no )  and
(dsi.route_date = '4/30/2019' and dsi.company_no = '11' and customer_no = '1000' and dli.company_no = '11')