如何在SQL中查询不同时间范围下产品对应的全部日期
需求说明
现有两张业务表:
- timeframe表:存储不同产品对应的日期上下限,包含
min_date、max_date、product三个字段 - prod表:存储日期与产品对应关系,包含
dates、product两个字段
需求为查询产品在自身对应min_date到max_date区间内的所有有效日期记录。
解决方案
在原有关联逻辑的基础上,新增日期区间的筛选条件即可,改造后的SQL如下:
基础通用版本(返回所有产品符合区间要求的记录)
SELECT d.product, p.dates AS `date` FROM prod p JOIN timeframe d ON p.product = d.product WHERE p.dates BETWEEN d.min_date AND d.max_date
特定产品查询版本(比如仅查询pencil的有效记录)
SELECT d.product, p.dates AS `date` FROM prod p JOIN timeframe d ON p.product = d.product WHERE p.dates BETWEEN d.min_date AND d.max_date AND d.product = 'pencil'
注意事项
如果表中日期字段是以字符串格式存储,需要先统一转换为日期类型再做比较,避免逻辑异常,以MySQL为例的转换写法参考:
WHERE STR_TO_DATE(p.dates, '%m/%d/%Y') BETWEEN STR_TO_DATE(d.min_date, '%m/%d/%Y') AND STR_TO_DATE(d.max_date, '%m/%d/%Y')
内容的提问来源于stack exchange,提问作者kirti choudhary
相关产品推荐
相关产品推荐

