首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql:尝试按部分值对记录进行分组

mysql:尝试按部分值对记录进行分组
EN

Stack Overflow用户
提问于 2019-06-04 08:59:59
回答 2查看 45关注 0票数 1

我正在尝试执行一个select查询来获取某些记录,并根据某个字段值对它们进行分组。

我有一个名为courses的表,如下所示:

代码语言:javascript
复制
+----+----------+
| id | shortname|
+----+----------+
3, 20115-2019a
4, 10112-2018a
5, 20115-2019b
6, 10112-2020a
7, 43112-2017a

“短名”字段的最后一部分表示了一个学期。("2019a“、"2018a”等)数字("20115“、"10112”等)是课程名称。

我需要一个sql查询,它将为我提供每门课程最近一学期的记录。

在上面的例子中,我希望得到的结果是:

  • 5,20115-2019b (因为2019b是20115的最后一个学期)
  • 6,10112-2020 a(因为2020 a是10112的最后一个学期)
  • 7,43112-207 a(因为2017a是43112的最后一个学期)

这就是我迄今为止尝试过的:

代码语言:javascript
复制
SELECT id, MAX(shortname)
FROM courses

不管用,只给我第一张唱片。

我设法将课程名称与学期分开,并尝试按课程名称分组:

代码语言:javascript
复制
SELECT id, shortname,
SUBSTRING_INDEX(shortname, "-", 1) AS coursename, 
SUBSTRING(shortname, POSITION("-" IN shortname)+1, 7) AS semester
FROM courses 
GROUP BY coursename

但这似乎给了我第一个而不是最近的课程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 09:20:21

你可以试试

代码语言:javascript
复制
select B.id, B.shortname
        from courses B inner join

        (SELECT SUBSTRING_INDEX(shortname, "-", 1) AS coursename
            , Max(SUBSTRING(shortname, POSITION("-" IN shortname)+1, 7)) AS semester
                FROM courses
                group by coursename ) A

        on B.shortname = CONCAT(A.coursename, "-",A.semester)

这是您的问题的小提琴,http://sqlfiddle.com/#!9/907eb/10

票数 0
EN

Stack Overflow用户

发布于 2019-06-04 09:54:50

您可以使用not exists

代码语言:javascript
复制
select c.* from courses c
where not exists (
  select 1 from courses
  where 
    left(shortname, locate('-', shortname) - 1) =
    left(c.shortname, locate('-', c.shortname) - 1)
    and 
    substr(shortname, locate('-', shortname) + 1) > 
    substr(c.shortname, locate('-', c.shortname) + 1)
)

演示

结果:

代码语言:javascript
复制
| id  | shortname   |
| --- | ----------- |
| 5   | 20115-2019b |
| 6   | 10112-2020a |
| 7   | 43112-2017a |
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56440619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档