【问题标题】:How to get the top row for each studid?如何获得每个学生的第一行?
【发布时间】:2022-11-24 12:00:53
【问题描述】:

是否有可能得到以下结果?

注:'S'代表暑期班。

|    sy   |sem|  studid |studmajor|
|2013-2014| 2 |2012-5037| COM SCI |
|2013-2014| 1 |2012-5037| COM SCI |
|2012-2013| 2 |2012-5037|   ENGG  |
|2012-2013| 1 |2012-5037|   BA    |
|2011-2012| S |2010-2011|   IT    |
|2011-2012| 2 |2010-2011|   IT    |
|2011-2012| 1 |2010-2011|   IT    |
|2010-2011| 2 |2010-2011|   IT    |
|2010-2011| 1 |2010-2011| PUP/CBP |

|    sy   |sem|  studid |studmajor|
|2013-2014| 2 |2012-5037| COM SCI |
|2011-2012| S |2010-2011|   IT    |

如果不能,也许是下面的那个?

|    sy   |sem|  studid |studmajor|
|2013-2014| 2 |2012-5037| COM SCI |
|2013-2014| 1 |2012-5037| COM SCI |
|2011-2012| S |2010-2011|   IT    |
|2011-2012| 2 |2010-2011|   IT    |
|2011-2012| 1 |2010-2011|   IT    |
|2010-2011| 2 |2010-2011|   IT    |

我不想看到他/她参加的上一个专业,我只想看到他/她现在的专业。

到目前为止,这是我的查询:

select studmajor,sy,sem,studid from semester_student ORDER BY sy DESC,sem DESC

【问题讨论】:

    标签: sql postgresql greatest-n-per-group


    【解决方案1】:

    使用 DISTINCT ON 和右边的 ORDER BY 定义从每组中选择哪一行:

    SELECT DISTINCT ON (studid) *
    FROM   semester_student
    ORDER  BY studid DESC, sy DESC, sem DESC;
    

    看:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      相关资源
      最近更新 更多