sql查询记录:利用union去重性质完成不同条件下的查询需求
记录最近在工作中遇到的一个sql查询需求:
有一张result表,id字段表示每次的任务id,需求为返回id最大的一次任务中的所有记录,如果查询结果条数大于等于3,则返回所有查询结果,但如果结果数不超过3条,则直接返回result表中date最近的三条记录。
例如上图示例中,max(id)为id=2的共两条记录,不满足大于等于3的条件,因此需要根据date返回最新的三条记录。
从逻辑上首先需要根据max(id)在result表中进行查询:
然后这里涉及到一个判断,IF(结果条数<3),实际查询结果为:
(这里进行了很多尝试,想用if…else,越写越复杂还没法满足条件。。。省)
最后想到两个查询结果的列都一致,是不是可以用union…
于是,其实很简单的做法,**利用union会去掉重复的行的特性 **(union all 则会允许重复值出现),直接将两种情况下的查询组合起来:
就完成啦啦啦啦~
不知道大家还有没有其他方法,求教~~