mysql - 使用 MySQL sql_mode=only_full_group_by 获取组的第一行

标签 mysql

在mySQL 5.7.5之前,我能够弄清楚这种类型的查询,但是在5.7.5之后,由于选项sql_mode=only_full_group_by默认启用,我有点迷失了......

我有一个查询,我想选取每组的第一行:

SELECT
    w.work_id, w.`name`, CONCAT(r.recording_id, '/', r.seo_url)
FROM
    work w
    JOIN recording r ON w.work_id = r.work_id
    JOIN `release`rl ON r.release_id = rl.release_id 
WHERE
    r.is_performer = 1 and r.is_video = 0
ORDER BY
    w.work_id, rl.released_date_year is null, rl.released_date_year, rl.released_date_month is null, rl.released_date_day is NULL, rl.released_date_day

结果集看起来像

| work_id | name     | href             |
|---------|----------|------------------|
|       1 | Not so   | 1/not-so         |
|       2 | The moon | 2/the-moon       |
|       3 | Why      | 3/why.           |
|       4 | A flower | 4/a-flower       |
|       5 | Hello    | 46/hello-world   |
|       5 | Hello    | 56/hello         |
|       6 | A ti     | 7/a-ti           |
|       7 | I know   | 8/i-know         |
|       8 | Because  | 9/because        |
|      12 | Morning  | 23/morning-sun   |
|      12 | Morning  | 84/morning-remix |
|      12 | Morning  | 73/morning-beat  |
|      15 | Saturday | 87/i-know        |
|      16 | Night    | 92/because       |

我希望它返回以下内容:

| work_id | name     | href             |
|---------|----------|------------------|
|       1 | Not so   | 1/not-so         |
|       2 | The moon | 2/the-moon       |
|       3 | Why      | 3/why.           |
|       4 | A flower | 4/a-flower       |
|       5 | Hello    | 46/hello-world   |
|       6 | A ti     | 7/a-ti           |
|       7 | I know   | 8/i-know         |
|       8 | Because  | 9/because        |
|      12 | Morning  | 23/morning-sun   |
|      15 | Saturday | 87/i-know        |
|      16 | Night    | 92/because       |

换句话说,我已经按照我想要的方式对行进行了排序,知道我只需要选择每个组的第一行。

我如何实现这一目标?

注意: 有类似的东西但没有答案 MySQL 5.7.5+ get first row for the groups

最佳答案

你可以尝试这样的事情

选择 w.work_id, w.`名字`, substring_index(GROUP_CONCAT(CONCAT(r.recording_id, '/', r.seo_url)), ',', 1) as href 从 工作 JOIN 记录 r ON w.work_id = r.work_id JOIN `release`rl ON r.release_id = rl.release_id 在哪里 r.is_performer = 1 且 r.is_video = 0 按 w.work_id 分组 订购依据 w.work_id、rl.released_date_year 为空、rl.released_date_year、rl.released_date_month 为空、 rl.released_date_day 为 NULL,rl.released_date_day

关于mysql - 使用 MySQL sql_mode=only_full_group_by 获取组的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59691981/

相关文章:

mysql - 在 MySQL 中查找派生 View 的表

MySql for Excel - 导入订单错误

mysql - 数据库在 QuerySet.datetimes() 中返回无效值

mysql - 如何在 MySQL 查询中进行正则表达式

Java:更新MySQL表的id

mysql - 在mysql中的两个数据库之间在mysql中触发

mysql - mysql 检索一定数量的同字段记录

mysql - 这个 coldfusion9 SQL 搜索查询可以更快吗?

java - 组织.hibernate.PropertyAccessException : Could not set field value with Composite Key

mysql - Hippo cms 重启构建的项目