mysql - 如何从另一个表中动态检索最近的日期 MySQL
问题描述
我有两张桌子:
INFO
桌子
ID LockDate Investor
157 10/15/2018 TEST1
VF1 09/02/2018 TEST2
LO2 05/01/2018 TEST3
09K 03/03/2012 TEST4
098 05/01/2012 TEST5
099 09/09/2012 TEST6
2YT 08/25/2012 TEST7
NUMBERS
桌子
Dates Amount
10/10/2018 25.10
08/31/2018 200.15
05/10/2018 15.251
03/03/2012 10.10
05/10/2012 15.251
08/31/2012 548.0
我希望查询选择 INFO 表中的所有值,并在 Numbers 表中找到最接近或相等的日期并给我金额。所以我的结果是:
ID LockDate Investor Amount
157 10/15/2018 TEST1 25.10
VF1 09/02/2018 TEST2 200.15
LO2 05/01/2018 TEST3 15.251
09K 03/03/2012 TEST4 10.10
098 05/01/2012 TEST5 15.251
099 09/09/2012 TEST6 548.0
2YT 08/25/2012 TEST7 548.0
最接近的意思是等于或最接近的一个,无论它小于还是大于锁定日期。
这是我正在使用的查询,但它只是检索更大或相等的查询,这对我来说根本不起作用,因为我必须动态地进行......
SELECT I.* ,
N.Amount FROM
(
SELECT A.*, MIN(NUM.Dates) AS XDATE
FROM INFO A
INNER JOIN NUMBERS AS NUM
ON NUM.Dates >= A.LockDate
GROUP BY A.ID
)AS RES
INNER JOIN NUMBERS AS N
ON N.Dates = I.XDATE
我将不胜感激。
解决方案
LockDate
您只需要找到减号的绝对最小值Dates
。这将为您提供最接近的日期;更小或更大。休息很容易。
SELECT info.*, numbers.*
FROM info
INNER JOIN (
SELECT ID, MIN(DATEDIFF(GREATEST(LockDate, Dates), LEAST(LockDate, Dates))) Delta
FROM info
CROSS JOIN numbers
GROUP BY ID
) g ON info.ID = g.ID
INNER JOIN numbers ON DATEDIFF(GREATEST(LockDate, Dates), LEAST(LockDate, Dates)) = g.Delta
推荐阅读
- javascript - 单击 iframe vanilla js 中的按钮
- reactjs - 如何从子组件获取状态数据到父组件?
- performance - rdpmc: surprising behavior
- html - 在表格文本框元素周围环绕文本
- php - 错误:试图获取非对象的属性
- sql-server - 如何根据 SQL Server 中另一列的值添加一个新列来标记列的重复?
- flutter - 来自动态列表的颤振流
- android - Classes using methods of other dependencies is not working in my custom library, any suggestions?
- python - How can I get all the index of all the NaNs of a list?
- go - 从指针接口获取结构的大小