首页 > 解决方案 > 选择sql组中的不同列

问题描述

我有以下行:

DateTime    Item_no     Vo_No
2019-06-27  30322264    0118113
2017-12-27  00265929    0242712
2019-01-21  30322264    0515768
2017-12-27  00265929    0400026
2019-01-21  30322264    0569606
2018-09-25  00265929    0696864
2019-01-21  30317757    0696619
2019-06-27  30317757    0118113
2017-12-27  00265929    0242624
2017-01-24  00265929    0282971
2019-01-21  30317757    0386202
2019-01-21  30317757    0515706
2019-01-21  30322264    0696619
2017-12-27  00265929    0242625
2017-12-27  00265929    0395347
2017-12-27  00265929    0441449
2019-01-21  30317757    0569605
2017-12-27  00265929    0282972
2017-01-24  00265929    0282984
2019-01-21  30322264    0397256

我正在尝试获取具有最新日期和 vo_no 的不同项目编号。

我想出了以下查询:

 SELECT MAX(b.upd_dtime), b.item_no 
 FROM vo_item_t b JOIN (
     SELECT a.vo_no, a.vo_state, a.vo_confirm_date, a.vo_order_date 
     FROM vo_order_t a) y ON y.vo_no = b.vo_no and b.item_No IN(30317757, 30322264, 00265929) 
 GROUP BY b.item_no

它工作得很好,我得到以下结果:

Date        Item_No
2019-06-27  30322264
2019-06-27  30317757
2018-09-25  00265929

但正如您所见,每个 Item_No 都缺少 vo_no,所以我尝试了以下方法:

 SELECT MAX(b.upd_dtime), b.item_no, y.vo_no 
 FROM vo_item_t b JOIN (
     SELECT a.vo_no, a.vo_state, a.vo_confirm_date, a.vo_order_date 
     FROM vo_order_t a) y ON y.vo_no = b.vo_no and b.item_No IN(30317757, 30322264, 00265929) 
 GROUP BY b.item_no, y.vo_no

如您所见,我在 select 和 group by 中添加了 y.vo_no。但是查询的结果如下:

2019-06-27  30322264    0118113
2017-12-27  00265929    0242712
2019-01-21  30322264    0515768
2017-12-27  00265929    0400026
2019-01-21  30322264    0569606
2018-09-25  00265929    0696864
2019-01-21  30317757    0696619
2019-06-27  30317757    0118113
2017-12-27  00265929    0242624
2017-01-24  00265929    0282971
2019-01-21  30317757    0386202
2019-01-21  30317757    0515706
2019-01-21  30322264    0696619
2017-12-27  00265929    0242625
2017-12-27  00265929    0395347
2017-12-27  00265929    0441449
2019-01-21  30317757    0569605
2017-12-27  00265929    0282972
2017-01-24  00265929    0282984
2019-01-21  30322264    0397256

item_no 上的 distinct 不再起作用。

所以我的问题是:我怎样才能获得不同 item_no 的 vo_no?

标签: sqloracle

解决方案


您可以使用内部连接来解决此问题。可能有一种更简单的方法,但现在这应该可行

select x.*,y.vo_no from (
 SELECT MAX(b.upd_dtime) as MaxT, b.item_no as Item_NO
 FROM vo_item_t b JOIN (
     SELECT a.vo_no, a.vo_state, a.vo_confirm_date, a.vo_order_date 
     FROM vo_order_t a) y ON y.vo_no = b.vo_no and b.item_No IN(30317757, 30322264, 00265929) 
 GROUP BY b.item_no
)x 
INNER JOIN
vo_order_t y
ON x.MaxT = y.Date
AND x.Item_NO = y.Item_No

推荐阅读