如何在MYSQL中按组排序

时间:2017-12-30 06:59:36

标签: php mysql sql mysqli

我的查询不起作用:(

这些是我的疑问:

preg_replace

那么,哪些查询适合我需要的东西..

提前致谢

enter image description here

3 个答案:

答案 0 :(得分:1)

您的预期输出意味着您需要每个TANGGAL_PESAN组的最新ID_PENGIRIM条记录。如果是这样,那么以下查询应该有效:

SELECT p1.*
FROM PESAN p1
INNER JOIN
(
    SELECT ID_PENGIRIM, MAX(TANGGAL_PESAN) AS max_time
    FROM PESAN
    GROUP BY ID_PENGIRIM
) p2
    ON p1.ID_PENGIRIM = p2.ID_PENGIRIM AND
       p1.TANGGAL_PESAN = t2.max_time;

子查询为每个组查找最新的TANGGAL_PESAN时间戳。然后,我们将PESAN表连接到此子查询,以仅保留我们想要的最新记录。至于为什么你的attemtps不工作,你需要使用某种子查询来获得你想要的结果。

答案 1 :(得分:0)

您可以按ID_PENGIRIMTANGGAL_PESAN对分区进行分区,给出等级并过滤排名为1的结果

select * from (
  select 
  p.*,
  row_number() over (partition by  id_pengirim order by tanggal_pesan desc nulls last) as rank 
  from pesan p
) where rank = 1

结果

| ID_PESAN | ID_ANGGOTA | ID_PENGIRIM | ISI_PESAN |         TANGGAL_PESAN | RANK |
|----------|------------|-------------|-----------|-----------------------|------|
|        1 |          1 |           1 |         a | 2017-12-29 07:32:52.0 |    1 |
|        4 |          1 |           2 |         d | 2017-12-28 07:32:52.0 |    1 |

DDL

create table PESAN (
  id_pesan varchar2(15),
  id_anggota varchar2(15),
  id_pengirim varchar2(15),
  isi_pesan varchar2(15),
  tanggal_pesan timestamp
);

DML

insert into PESAN values ('1','1','1','a',sysdate-1);
insert into PESAN values ('2','1','2','b',sysdate-4);
insert into PESAN values ('3','1','1','c',sysdate-3);
insert into PESAN values ('4','1','2','d',sysdate-2);

答案 2 :(得分:0)

抱歉兄弟,我试过但失败了:

您可以通过ID_PENGIRIM按TANGGAL_PESAN对分区进行分区,给出排名为1的排名和过滤结果。

enter image description here