【发布时间】:2021-05-15 12:02:33
【问题描述】:
由于在我在以下查询中添加“限制 1”的部分中满足定义条件的行不止一条,我希望通过使用此限制获取满足条件的第一行来继续查询。我可以在我提到的地方做这样的限制吗?
表1
| id | name |
|-------|-----------|
| 1 | pro1 |
| 2 | pro2 |
| 3 | pro3 |
表2
| id | start_date | end_date | product_id | daily | old_daily |
|----|------------|------------|------------|-------|-----------|
| 1 | 2021-02-19 | 2021-03-21 | 1 | 700 | 800 |
| 2 | 2021-02-19 | 2021-03-21 | 2 | 400 | 550 |
| 3 | 2021-02-19 | 2021-03-21 | 3 | NULL | 700 |
| 4 | 2021-03-22 | 2021-04-21 | 2 | NULL | 600 |
| 5 | 2021-04-22 | 2021-05-21 | 2 | NULL | 650 |
select
`table1`.`id`, `name`,
(CASE WHEN table2.daily IS NOT NULL THEN table2.daily
ELSE table2.old_daily END) AS price
from `table1`
inner join `table2` on `table1`.`id` = `table2`.`product_id`
where (date(`end_date`) >= '2021-02-11' LIMIT 1)
or (date(`start_date`) <= '2025-02-11'
and date(`end_date`) >= '2025-02-11')
order by `price` DESC
Limit1 在此查询中不起作用。无限次查询结果如下:
| id | name | price |
|----|------|-------|
| 1 | pro1 | 700 |
| 2 | pro2 | 400 |
| 3 | pro3 | 700 |
| 2 | pro2 | 600 |
| 2 | pro2 | 650 |
我想要得到的结果:
| id | name | price |
|----|------|-------|
| 1 | pro1 | 700 |
| 2 | pro2 | 400 |
| 3 | pro3 | 700 |
【问题讨论】:
-
您在寻找什么结果?比如,你为什么认为你需要
LIMIT? -
@RocketHazmat 我添加了我想要的结果。你能再检查一遍吗?
-
听起来不是
LIMIT,而是GROUP BY table1.id(也可能是GROUP_CONCAT())。 -
尝试删除
LIMIT 1并尝试将order by price DESC替换为group by table1.id ASC。看这个演示:sqlfiddle.com/#!9/86ed8e/5 -
为什么不是700、650、700?
标签: mysql greatest-n-per-group