如何获取trackproc表中最后两个日期的所有记录
解决方法
你的查询返回空是因为BETWEEN的参数顺序搞反了——BETWEEN要求左边的值小于等于右边的值,但你把更大的最后一个日期放在了左边,更小的倒数第二个日期放在右边,自然匹配不到任何数据。
不过更简单可靠的写法是用IN子句,直接匹配最后两个日期:
SELECT * FROM trackproc WHERE datum IN ( SELECT datum FROM trackproc ORDER BY datum DESC LIMIT 2 ) ORDER BY datum;
如果一定要用BETWEEN,就把两个子查询的顺序调换过来,确保左边是较小的日期,右边是较大的日期:
SELECT * FROM trackproc WHERE datum BETWEEN (SELECT datum FROM trackproc ORDER BY datum DESC LIMIT 1,1) AND (SELECT datum FROM trackproc ORDER BY datum DESC LIMIT 1) ORDER BY datum;
另外要注意,如果表中存在多个相同的最大日期记录,LIMIT 2可能会拿到重复的日期,但这正好符合你要获取最后两个日期所有记录的需求——因为如果最大日期有多个记录,倒数第二个日期是次大的那个,IN子句会包含这两个日期的所有数据。
内容的提问来源于stack exchange,提问作者user9228488
相关产品推荐
相关产品推荐

