SQL新手求助:如何将两个查询结合,用另一表结果替换硬编码日期?
解决方案:用子查询替换硬编码日期
嘿,别担心,新手刚开始接触SQL遇到这种问题太正常啦!我来帮你把两个查询合并起来,用第二个查询的结果替换第一个里的固定日期。
最简单的方式是把第二个查询作为子查询直接嵌入第一个语句中,替换掉原来的硬编码日期'2018-01-23'。完整的SQL语句如下:
SELECT Tap_Back.* FROM Tap_Back WHERE Tap_Back.time > ( SELECT readingdates.readdate FROM readingdates WHERE readingdates.readdate <= CURRENT_DATE() ORDER BY readingdates.readdate DESC LIMIT 1 );
简单解释一下:
- 括号里的子查询会先执行,它会从
readingdates表中找出不晚于当前日期的最新一条记录的readdate值(因为用了ORDER BY ... DESC LIMIT 1)。 - 然后这个值会被代入外层查询,作为
Tap_Back.time的比较条件,这样就不用手动写死日期啦。
如果你的数据库支持的话,也可以用CTE(公共表表达式)来让代码更清晰,比如:
WITH LatestReadDate AS ( SELECT readdate FROM readingdates WHERE readdate <= CURRENT_DATE() ORDER BY readdate DESC LIMIT 1 ) SELECT Tap_Back.* FROM Tap_Back, LatestReadDate WHERE Tap_Back.time > LatestReadDate.readdate;
两种方式都能达到你的需求,子查询的写法更通用,适合大多数数据库。
内容的提问来源于stack exchange,提问作者Louis Van Der Walt
相关产品推荐
相关产品推荐

