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

在子查询中引用外层查询ID计算发票首次付款日期的问题咨询

SQL查询问题解答

替换规则

你只需要给外层查询的invoices表设置别名,即可在子查询中正确引用外层的invoice_id字段,#INVOICE_REF_ID需要替换为外层表别名对应的字段值。
完整的正确查询语句如下:

SELECT 
  i.invoice_id,
  i.report_date,
  i.status,
  CASE i.status
     WHEN 'PAID' THEN
        (SELECT report_date FROM invoices 
         WHERE invoice_id = i.invoice_id
         AND status = 'PAID' 
         ORDER BY report_date LIMIT 1)
  END AS paid_date
FROM invoices i

更高性能的替代写法

如果你使用的数据库支持窗口函数,更推荐用窗口函数实现该需求,可以避免关联子查询逐行扫描的性能消耗:

SELECT 
  invoice_id,
  report_date,
  status,
  CASE WHEN status = 'PAID'
       THEN MIN(CASE WHEN status = 'PAID' THEN report_date END) OVER (PARTITION BY invoice_id)
  END AS paid_date
FROM invoices

该写法按invoice_id分组取对应发票首次变为PAID状态的最小日期,输出结果和你的预期完全一致。

内容的提问来源于stack exchange,提问作者Alex Ramirez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:18:04