基于分配日期筛选user_id的SQL查询问题求助
问题排查与解决方案
你的查询无法得到预期结果,核心问题如下:
1. 字段名不匹配
示例数据中的字段是allocation start date和allocation end(包含空格),但你的查询语句里误用了allocation_start_date和allocation_end_date(下划线分隔),SQL无法识别这些不存在的字段,直接导致筛选条件失效。
2. 明确筛选逻辑
根据你的预期结果,需求是筛选分配周期完全落在传入的from_date到to_date时间段内的用户,对应的逻辑应为:
- 分配开始日期不早于传入的
from_date - 分配结束日期不晚于传入的
to_date
修正后的SQL查询
根据不同SQL方言,处理带空格的字段名:
- MySQL/MariaDB(用反引号包裹字段):
SELECT DISTINCT user_id FROM table_name WHERE `allocation start date` >= ? -- 传入from_date参数 AND `allocation end` <= ? -- 传入to_date参数
- SQL Server(用方括号包裹字段):
SELECT DISTINCT user_id FROM table_name WHERE [allocation start date] >= ? AND [allocation end] <= ?
- PostgreSQL(用双引号包裹字段,需匹配字段大小写):
SELECT DISTINCT user_id FROM table_name WHERE "allocation start date" >= ? AND "allocation end" <= ?
结果验证
传入from_date='2022-05-01'和to_date='2022-07-30'时,上述查询会返回user_id=2和user_id=4,完全符合你的预期。
内容的提问来源于stack exchange,提问作者dastagir shah
相关产品推荐
相关产品推荐

