mysql - 从 F 表按日期搜索的最新金额从另外两个表插入 R 表,并使用表 S mysql 中的其他数据

标签 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

需要找到最新的金额表 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')
)

Demo on DB Fiddle :

两个查询都返回:

| 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/

相关文章:

mysql - 按原因排序 文件排序

mysql - 重复输入错误,但存在欺骗

mysql - 我怎样才能优化这个查询

sql - 是否可以使用 INSERT 命令将数据插入表的中间部分?

sql - 使用MySQL计算中位数的简单方法

sql - 如何使用加权子选择正确执行 SQL UPDATE?

mysql - 三个条件的sql查询

php - 更新创建简单的 Php、MySql 投票系统的问题

php - MySQL 显示多对多关系的结果

php - 字段 'password' 没有默认值