sql - 选择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?
解决方案
您可以使用内部连接来解决此问题。可能有一种更简单的方法,但现在这应该可行
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
推荐阅读
- graph - 使用 cytoscape 分配节点坐标
- sql - 运行具有相互依赖关系的 sql 脚本
- javascript - 获取时如何从 API 获取编号的 ID?
- javascript - 视频标签不会在 Firefox 中自动播放,DOMException
- sharepoint - SharePoint 使用另一个列表中的数据计算列文本?
- python - 在pygame中绘制一个包含颜色渐变的圆圈
- python-3.x - 字符串格式中的多变量问题
- arrays - 多维ArrayPool使用
- c# - 如何将调试日志记录添加到 C# .NET Core 单元测试
- ckan - 收割时的ckan 2.8电子邮件验证