#### 模式1:子查询方式(推荐) ```sql -- 示例:查询E1企业基于其查询日期前12个月的销售数据 SELECT i."购方单位代码" AS customer_id, e2."企业名称" AS customer_name, i."金额" AS amount, i."开票日期" AS invoice_date FROM invoice_info i LEFT JOIN enterprise_info e2 ON i."购方单位代码" = e2."企业代码" WHERE i."企业代码" = 'E1' AND i."开票日期" BETWEEN ((SELECT "查询日期" FROM enterprise_info WHERE "企业代码" = 'E1') - INTERVAL '12 months') AND (SELECT "查询日期" FROM enterprise_info WHERE "企业代码" = 'E1') LIMIT 100
#### 模式2:JOIN方式
1 2 3 4 5 6 7 8 9 10 11
-- 通过JOIN获取查询日期 SELECT i."购方单位代码" AS customer_id, buyer."企业名称" AS customer_name, i."金额" AS amount, i."开票日期" AS invoice_date FROM invoice_info i LEFTJOIN enterprise_info seller ON i."企业代码" = seller."企业代码" LEFTJOIN enterprise_info buyer ON i."购方单位代码" = buyer."企业代码" WHERE i."企业代码" ='E1' AND i."开票日期" BETWEEN (seller."查询日期" -INTERVAL'12 months') AND seller."查询日期" LIMIT 100
-- ✅ 正确理解:使用企业表中的查询日期字段 WHERE "开票日期" BETWEEN ((SELECT "查询日期" FROM enterprise_info WHERE "企业代码" ='E1') -INTERVAL'12 months') AND (SELECT "查询日期" FROM enterprise_info WHERE "企业代码" ='E1')
-- ❌ 错误理解:使用当前系统日期 WHERE "开票日期" BETWEEN (CURRENT_DATE-INTERVAL'12 months') ANDCURRENT_DATE
-- 查询企业基本信息 SELECT "企业代码", "企业名称", "是否违约", "查询日期" FROM enterprise_info WHERE "查询日期" >='2020-01-01' LIMIT 100
-- 查询发票信息 SELECT "企业代码", "发票号码", "开票日期", "金额", "价税合计" FROM invoice_info WHERE "开票日期" BETWEEN'2023-01-01'AND'2023-12-31' LIMIT 100
### 关联查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14
-- 企业及其发票信息 SELECT e."企业代码", e."企业名称", i."发票号码", i."金额", i."开票日期" FROM enterprise_info e LEFTJOIN invoice_info i ON e."企业代码" = i."企业代码" WHERE e."查询日期" >='2020-01-01' LIMIT 100
-- 购方关联查询 SELECT buyer."企业名称" AS 购方企业, seller."企业代码" AS 销方代码, i."发票号码", i."价税合计" FROM invoice_info i LEFTJOIN enterprise_info buyer ON i."购方单位代码" = buyer."企业代码" LEFTJOIN enterprise_info seller ON i."企业代码" = seller."企业代码" WHERE i."开票日期" >='2023-01-01' LIMIT 100