我想从 F 表中提取具有最新日期的金额并插入到表 R 中,其中表 f 代码等于表 S 代码和滚动,来自表 S 的名称
这是我的表:F
code amount datenewfee
111 700 20-September-2019
112 800 25-September-2019
111 700 20-October-2019
112 800 30-October-2019
需要找到最新的金额表 F 我的尝试是:
SELECT amount FROM fee WHERE code = 112 order by str_to_date(datenewfee, '%dd-%MM-%yyyy') desc limit 1
表:S
roll name code
1120 aaaaa 111
1121 eeeee 111
1122 hhhh 112
1123 bbbb 111
1124 jjjj 112
期望的结果:表R
roll name code amount
1120 aaaaa 111 700
1121 eeeee 111 700
1122 hhhh 112 800
1123 bbbb 111 700
1124 jjjj 112 800
我正在尝试使用单个代码 111,例如:
INSERT INTO receivable(roll, name, code, amount)
SELECT roll, name, code, 'amount FROM fee WHERE code = 111 order by str_to_date(`datenewfee`, '%dd-%MM-%yyyy') desc limit 1'
FROM students
WHERE code = 111
对于代码 112,例如:
INSERT INTO receivable(roll, name, code, amount)
SELECT roll, name, code, 'amount FROM fee WHERE code = 112 order by str_to_date(`datenewfee`, '%dd-%MM-%yyyy') desc limit 1'
FROM students
WHERE code = 112
请帮助并忽略我的语言
最佳答案
在 MySQL 8.0 中,您可以 JOIN
两个表并使用 RANK()
获取共享相同code
的每组记录中的最新记录:
SELECT roll, name, code, amount
FROM (
SELECT
s.roll,
s.name,
s.code,
f.amount,
RANK() OVER(PARTITION BY f.code ORDER BY STR_TO_DATE(f.datenewfee, '%d-%M-%Y') DESC) rk
FROM fee f
INNER JOIN students s ON s.code = f.code
) x
WHERE rk = 1
在早期版本中,您可以使用带有 NOT EXISTS
的 crrelated 子查询过滤每组最近记录的条件:
SELECT
s.roll,
s.name,
s.code,
f.amount
FROM fee f
INNER JOIN students s ON s.code = f.code
WHERE NOT EXISTS (
SELECT 1
FROM fee f1
WHERE f1.code = f.code
AND STR_TO_DATE(f1.datenewfee, '%d-%M-%Y') > STR_TO_DATE(f.datenewfee, '%d-%M-%Y')
)
两个查询都返回:
| roll | name | code | amount |
| ---- | ----- | ---- | ------ |
| 1120 | aaaaa | 111 | 700 |
| 1121 | eeeee | 111 | 700 |
| 1122 | hhhh | 112 | 800 |
| 1123 | bbbb | 111 | 700 |
| 1124 | jjjj | 112 | 800 |
关于mysql - 从 F 表按日期搜索的最新金额从另外两个表插入 R 表,并使用表 S mysql 中的其他数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354197/