You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中含UNION的SQL查询按日期排序问题求助

嘿,我来帮你搞定Excel里用SQL写带UNION和日期排序的查询问题~

解决Excel中SQL带UNION的日期排序需求

首先,因为Work_order_0和Work_history_0字段完全一致,我们可以先用UNION(或UNION ALL,按需选择)把这两个表的数据合并,再和Note_0做关联,最后统一按日期排序。这里要注意:ORDER BY必须放在整个查询的末尾,作用于合并后的全部数据,单独给子查询加排序是无效的。

下面是补全并优化后的完整SQL代码:

SELECT 
    combined.WO_Key AS 'WO key',
    combined.Pos_key AS 'POS key',
    combined.Order_date AS 'Order date',
    combined.Order_time/86400 AS 'Order time',
    Note_0.Note AS 'Note'
FROM (
    -- 合并Work_order和Work_history的核心数据
    SELECT WO_Key, Pos_key, Order_date, Order_time 
    FROM API3.PUB.Work_order Work_order_0
    UNION ALL -- 不需要去重就用这个,比UNION快;要去重就换成UNION
    SELECT WO_Key, Pos_key, Order_date, Order_time 
    FROM API3.PUB.Work_history Work_history_0
) AS combined
LEFT JOIN API3.PUB.Note Note_0 
    ON combined.WO_Key = Note_0.WO_Key -- 补全关联条件,假设Note表用WO_Key关联
ORDER BY combined.Order_date DESC, combined.Order_time/86400 DESC; -- 按日期+时间排序,DESC是降序,升序可去掉

关键细节说明:

  • UNION vs UNION ALL:如果两张表没有重复记录,优先用UNION ALL,它不会做去重检查,执行效率更高;如果需要剔除重复数据,就用UNION。
  • 排序逻辑:把ORDER BY放在最后,才能对合并后的所有数据生效,子查询里的排序不会影响最终结果。
  • 关联适配:我默认Note_0表也用WO_Key作为关联字段,如果实际字段名不同,你替换成对应字段即可。
  • 时间转换:你原来的Order_time/86400是把Excel时间序列号转成可读格式的逻辑,我保留了,排序时用转换后的值或者原始Order_time结果一致。

如果你的Note表和合并表还有其他关联条件,直接在ON后面补充就行~

内容的提问来源于stack exchange,提问作者Cristina K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:05:28