以下查询,
select shelf_id, issue_date, current_qty
from Stock
where barcode = '555' and issue_date <= '2018-05-30 14:28:32'
将得到以下结果,
10 2018-05-25 00:00:00 5
10 2018-05-28 00:00:00 55
5 2018-05-29 00:00:00 100
添加 group by shelf_id
会导致这样的结果,
10 2018-05-25 00:00:00 5
5 2018-05-29 00:00:00 100
预期结果如下。
10 2018-05-28 00:00:00 55
5 2018-05-29 00:00:00 100
这背后的原因是,对于每个组,我想返回组中最新的一行 issue_date
. limit 1
将所有的组限制为一组, having issue_date...
将是一个可能的解决方案,但我不知道如何获得最接近的日期最大(问题\日期)
不使用子查询就可以完成这个任务吗?
编辑:
where子句中的第二个条件 issue_date <= '2018-05-30 14:28:32'
是用户输入 issue_date <= ?2
如果要最初筛选表,则查询应按每个shelf\u if的结果分组,但返回最接近max(issue\u date)日期的行。所以我不明白如何用子查询替换这个条件。
3条答案
按热度按时间g9icjywg1#
你可以这样试试
只要(货架标识,发行日期)是唯一的,这应该工作,请让我知道如果我错了
5jdjgkvh2#
不要使用
group by
! 您正在尝试筛选行。这里有一种方法:作为奖励,加上指数
stock(shelf_id, issue_date)
,性能应该比group by
.yyyllmsg3#
如果您有“标识”列,则可以使用
LIMIT
条款: