Mysql 从另两个表按F表中的最新金额插入R表按日期搜索表S中的其他数据

Mysql 从另两个表按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

我想从表格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 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吗