SQL/MySQL -使用最新条目更新目标表

idfiyjo8  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(148)

我正在寻找一些关于SQL/MySQL问题的帮助。
我有三个源表:

CREATE TABLE `customers` (
  `cid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `customer_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
CREATE TABLE `standards` (
  `sid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `standard_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
CREATE TABLE `partial_standard_compliance` (
  `customer` bigint(20) unsigned NOT NULL,
  `standard` bigint(20) unsigned NOT NULL,
  `standard_compliance` bigint(20) unsigned DEFAULT NULL,
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8

其原理是客户使用partial_standard_compliance表中的standard_compliance列为自己评级。客户可以多次对同一标准进行评级。结果示例:

+----------+----------+---------------------+---------------------+
| customer | standard | standard_compliance | created_time        |
+----------+----------+---------------------+---------------------+
|        1 |        1 |                  50 | 2023-01-28 16:19:34 |
|        1 |        1 |                  60 | 2023-01-28 16:19:40 |
|        1 |        1 |                  70 | 2023-01-28 16:19:48 |
|        2 |       10 |                  30 | 2023-01-28 16:58:21 |
|        2 |        8 |                  60 | 2023-01-28 16:58:32 |
|        2 |        9 |                  60 | 2023-01-28 16:58:39 |
|        2 |        9 |                  80 | 2023-01-28 16:58:43 |
+----------+----------+---------------------+---------------------+

我需要创建第四个表,其中包含客户名称、标准名称和他们自己给出的最新评级。我一直在尝试使用JOINS和CREATE AS SELECT,但一直无法解决这个问题。如果能找到正确的方向,那就太好了。谢谢。
我一直在尝试使用JOINS和CREATE AS SELECT

kyks70gy

kyks70gy1#

我需要创建第4个表,其中包含客户名称、标准名称和他们最近给自己的评级
最好创建一个视图。

create view fourth_table as
select customer_name ,
       standard_name , 
       standard_compliance,
       created_time
from (select c.customer_name,
             s.standard_name,
             psc.standard_compliance,
             psc.created_time,
             row_number() over(partition by  c.customer_name order by psc.created_time desc ) as rn
      from customers c 
      inner join partial_standard_compliance psc on psc.customer=c.cid
      inner join standards s on s.sid=psc.standard
     ) x
where rn=1;

https://dbfiddle.uk/ZiK-k8jN
MySQL View

相关问题