javascript - MySQL获取每个用户ID的最大日期并将它们转换为sequelize
问题描述
这是我的 MySQL 查询
SELECT a.id,
a.name,
a.pname,
b.skill,
date_add(a.end_date, interval 1 DAY) AS available_date
FROM
(SELECT user.id,
concat(user.first_name, " ", user.last_name) AS name,
resource_allocated.project_id,
project.project_name AS pname,
resource_allocated.end_date
FROM USER
RIGHT JOIN resource_allocated ON user.id = resource_allocated.user_id
RIGHT JOIN project ON resource_allocated.project_id = project.id
WHERE resource_allocated.is_active=1) a
LEFT JOIN
(SELECT user.id,
concat(user.first_name, " ", user.last_name) AS name,
user_skill.skill_id,
skill.skill_name AS skill
FROM USER
RIGHT JOIN user_skill ON user.id = user_skill.user_id
RIGHT JOIN skill ON user_skill.skill_id = skill.id) b ON a.id = b.id
ORDER BY a.id;
结果如下所示:
+----+----------+-------+-------+----------------+
| id | name | pname | skill | available_date |
+----+----------+-------+-------+----------------+
| 1 | john doe | hms | php | 2019-01-02 |
| 1 | john doe | hms | react | 2019-01-02 |
| 2 | jane doe | hms | java | 2020-01-16 |
| 2 | jane doe | IS | java | 2019-06-21 |
| 2 | jane doe | hms | js | 2020-01-16 |
| 2 | jane doe | IS | js | 2019-06-21 |
+----+----------+-------+-------+----------------+
我希望 mysql 查询获取每个用户的最大日期,如下所示:
+----+----------+-------+-------+----------------+
| id | name | pname | skill | available_date |
+----+----------+-------+-------+----------------+
| 1 | john doe | hms | php | 2019-01-02 |
| 1 | john doe | hms | react | 2019-01-02 |
| 2 | jane doe | hms | java | 2020-01-16 |
| 2 | jane doe | IS | java | 2020-01-16 |
| 2 | jane doe | hms | js | 2020-01-16 |
| 2 | jane doe | IS | js | 2020-01-16 |
+----+----------+-------+-------+----------------+
如果可能,有人可以为结果查询提供等效的续集代码吗?提前致谢。
解决方案
如果您想在结果中获取最大日期(或最后日期),请使用max()
函数并group by name , pname
在最后使用
max(date_add(a.end_date, interval 1 day)) as available_date
如果您想按日期排列它们,请在查询末尾写下:
group by name, pname order by available_date
所以最终的查询将如下所示:
SELECT a.id,
a.name,
a.pname,
b.skill,
max(date_add(a.end_date, interval 1 day)) as available_date
FROM
(SELECT user.id,
concat(user.first_name, " ", user.last_name) AS name,
resource_allocated.project_id,
project.project_name AS pname,
resource_allocated.end_date
FROM USER
RIGHT JOIN resource_allocated ON user.id = resource_allocated.user_id
RIGHT JOIN project ON resource_allocated.project_id = project.id
WHERE resource_allocated.is_active=1) a
LEFT JOIN
(SELECT user.id,
concat(user.first_name, " ", user.last_name) AS name,
user_skill.skill_id,
skill.skill_name AS skill
FROM USER
RIGHT JOIN user_skill ON user.id = user_skill.user_id
RIGHT JOIN skill ON user_skill.skill_id = skill.id) b ON (a.id = b.id)
GROUP by name, pname , skill
ORDER by a.id, available_date;
推荐阅读
- javascript - 如何有条件地更改Vue中td的文本颜色
- r - 即使指定了 col_types,read_excel() 也会引发警告
- julia - Julia & Avro.jl:元组问题
- jasmine - 为什么在茉莉花中默认将allowRespy设置为false?
- accessibility - 在箭头访问时,单词必须像单个字母一样读取,因为它是邀请码,它不应该像单词一样读取
- vba - 如何确定 ReceivedTime 之前的工作日?
- aem - AEM 与谷歌企业recaptcha 库的集成
- network-programming - 我可以使用 VPLS 将 2 个远程设备放在同一个 LAN 中,然后运行 VRRP 协议来重新拥有 IP 地址吗?
- javascript - 通过 vue-bootstrap 中的复选框打开模式?
- laravel - Laravel 爆炸包含名称和数字的 Ajax 请求