【发布时间】:2023-04-07 21:50:01
【问题描述】:
我试图用tahun和semester列获取最新的id_status列(时间戳都是一样的,所以我不能使用它),我可以用这段代码来做没有问题:
SELECT A.id_ips, B.tahun, B.semester, B.id_status FROM data_ips A
LEFT JOIN data_status_mahasiswa B
ON A.id_mahasiswa = B.id_mahasiswa
ORDER BY B.tahun DESC, B.semester DESC
| id_ips | tahun | semester | id_status |
|---|---|---|---|
| 155324 | 2012 | 2 | 6 |
| 155324 | 2012 | 1 | 7 |
| 155324 | 2009 | 2 | 1 |
| 155324 | 2009 | 1 | 2 |
| 155324 | 2008 | 2 | 9 |
| 155324 | 2008 | 1 | 1 |
| 155325 | 2015 | 2 | 8 |
| 155325 | 2015 | 1 | 3 |
| 155325 | 2010 | 2 | 4 |
| 155325 | 2010 | 1 | 9 |
| 155325 | 2009 | 2 | 9 |
| 155325 | 2009 | 1 | 4 |
但是当我尝试使用列 id_ips 对其进行分组时,数据似乎不再被排序...
SELECT X.* FROM
(
SELECT A.id_ips, B.tahun, B.semester, B.id_status FROM data_ips A
LEFT JOIN data_status_mahasiswa B
ON A.id_mahasiswa = B.id_mahasiswa
ORDER BY B.tahun DESC, B.semester DESC
) AS X
GROUP BY X.id_ips
| id_ips | tahun | semester | id_status |
|---|---|---|---|
| 155324 | 2008 | 1 | 1 |
| 155325 | 2009 | 1 | 4 |
我曾尝试在同一个地方进行 GROUP BY 和 ORDER BY,如下所示:
SELECT A.id_ips, B.tahun, B.semester, B.id_status FROM db_mahasiswa.data_ips A
LEFT JOIN db_mahasiswa.data_status_mahasiswa B
ON A.id_mahasiswa = B.id_mahasiswa
GROUP BY A.id_ips
ORDER BY B.tahun DESC, B.semester DESC
还有这个:
SELECT X.* FROM
(
SELECT A.id_ips, B.tahun, B.semester, B.id_status FROM data_ips A
LEFT JOIN data_status_mahasiswa B
ON A.id_mahasiswa = B.id_mahasiswa
ORDER BY B.tahun DESC, B.semester DESC
) AS X
GROUP BY X.id_ips
ORDER BY X.tahun DESC, X.semester DESC
但它仍然产生相同的结果,我想要的是:
| id_ips | tahun | semester | id_status |
|---|---|---|---|
| 155324 | 2012 | 2 | 6 |
| 155325 | 2015 | 2 | 8 |
不知道问题出在哪里...?
【问题讨论】:
-
您需要在
group by之后的外部查询中放置订单;我不确定mysql,但在其他数据库引擎中,如果没有limit或top子句,order by将无效。 -
你为什么使用
group by?您没有进行任何聚合。如果您只想要第一行,只需在 ORDER BY 子句后使用 LIMIT 1。 -
@Stu 结果还是一样...
-
@forpas 数据远不止于此(不同的 id_ips)所以我不能使用限制
-
您希望我们猜出您的要求是什么吗?编辑您的问题并阐明您想要什么。
标签: mysql sql group-by sql-order-by