编写SQL查询rules表中关联item和dc已停用的规则ID
数据表与需求说明
现有3张数据表字段信息
- dc_activation表字段:id、item、dc、start_date、end_date、valid
- settings表字段:id、create_date、update_date、setting_type、sequence、name、value
- rules表字段:id、item、dc、name、start_date、valid
查询需求
查询rules表中,对应item和dc已停用的规则id。
停用判定规则:dc_activation表的end_date小于settings表中name为v_date的记录对应的value值时,判定该item和dc组合已停用。
符合要求的SQL语句
SELECT r.id AS disabled_rule_id FROM rules r -- 关联dc_activation表匹配item和dc组合 JOIN dc_activation da ON r.item = da.item AND r.dc = da.dc -- 取出系统配置的参考日期v_date CROSS JOIN ( SELECT CAST(value AS DATE) AS v_date FROM settings WHERE name = 'v_date' LIMIT 1 ) conf WHERE da.end_date < conf.v_date;
注:如果settings表中v_date存储的value已经是日期类型,可去掉
CAST(value AS DATE)转换逻辑,不同数据库的日期转换函数可根据实际场景调整,比如MySQL用STR_TO_DATE、PostgreSQL用TO_DATE。
内容的提问来源于stack exchange,提问作者Vaibhav Agnihotri
相关产品推荐
相关产品推荐

