我的查询不起作用:(
这些是我的疑问:
preg_replace
那么,哪些查询适合我需要的东西..
提前致谢
答案 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_PENGIRIM
按TANGGAL_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)