Mysql 从另两个表按F表中的最新金额插入R表按日期搜索表S中的其他数据
我想从表格F中提取最新日期的金额,并将其插入表格R中,其中表格F代码等于表格S代码和滚动,表格S中的名称 这是我的桌子:FMysql 从另两个表按F表中的最新金额插入R表按日期搜索表S中的其他数据,mysql,sql,Mysql,Sql,我想从表格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 需要从表格中查找最新金额,我的尝试是: SELECT amount FROM fee
code amount datenewfee
111 700 20-September-2019
112 800 25-September-2019
111 700 20-October-2019
112 800 30-October-2019
需要从表格中查找最新金额,我的尝试是:
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中,您可以
加入这两个表,并使用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
在早期版本中,您可以使用具有不存在
条件的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 |
谢谢,我可以使用另一个where if表:S(学生)有一列“status”和值0或1吗