【发布时间】:2021-06-08 16:58:43
【问题描述】:
我需要在所有对象中找到一个尽可能接近人们正在搜索的所需日期范围的价格。一个对象可以在不同的日期范围内有多个价格。
价格表
| id | objectid | price | start | end |
|---|---|---|---|---|
| 1 | 21 | 50 | 2021-01-01 | 2021-04-01 |
| 2 | 21 | 60 | 2021-04-02 | 2021-08-01 |
| 3 | 22 | 30 | 2021-01-01 | 2021-04-01 |
| 4 | 23 | 150 | 2021-01-01 | 2021-04-01 |
| 5 | 21 | 20 | 2021-08-02 | 2021-09-01 |
| 6 | 23 | 120 | 2021-07-01 | 2021-08-01 |
假设人们在2021-05-01 和2021-06-01 之间进行搜索,结果应该是:
| id | objectid | price |
|---|---|---|
| 2 | 21 | 60 |
| 3 | 22 | 30 |
| 6 | 23 | 120 |
我正在处理这个查询,但在某个地方我失去了焦点。
SELECT p.objectid,
p.id
p.start,
p.end,
p.price,
ABS(DATEDIFF(p.start, '2021-05-01') + DATEDIFF(p.end, '2021-06-01')) diff
FROM
prices AS p1
INNER JOIN(
SELECT
p.objectid,
MIN(
ABS(
DATEDIFF(start, '2021-05-01') + DATEDIFF(end, '2021-06-01')
)
) AS diff
FROM
prices p
GROUP BY
p.objectid
) p2
ON
p1.objectid = p2.objectid AND diff = p2.diff
【问题讨论】:
标签: mysql join group-by datediff