一个SQL查询问题,麻烦哪位大哥帮小弟看一下,谢了!

jayleehom2000 2011-07-25 10:59:51
111111111111 2011-7-22
111111111111 2011-7-22
222222222222 2011-7-22
222222222222 2011-7-22
222222222222 2011-7-22
111111111111 2011-7-23
111111111111 2011-7-23
111111111111 2011-7-23
333333333333 2011-7-23
333333333333 2011-7-23
333333333333 2011-7-23
222222222222 2011-7-23
222222222222 2011-7-23


比如第一列是电话号码 第二列是时间
现在我就是想实现一个这样的查询

就是排除相同数据 但是麻烦的就是 要排除每天相同 而不是所有数据里面的相同数据
总的来说 我要的结果就是 我查询的时候 是要查询全部的数据 但是全部数据里面 又要把每天的相同数据排除掉
还有就是 当天的这一条唯一数据 我要取最新时间的
我就是不明天这个查询所有数据的时候 怎么又去排除每天数据里面的相同数据
要的结果就是这样


111111111111 2011-7-22 15:03:25
222222222222 2011-7-22 12:26:21
111111111111 2011-7-23 20:15:22
333333333333 2011-7-23 18:09:25
222222222222 2011-7-23 16:33:45




...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_luo_xiaozi 2011-07-25
  • 打赏
  • 举报
回复
也可以这样: select phone, max(tdate) from t group by phone, trunc(tdate);
horizonlyhw 2011-07-25
  • 打赏
  • 举报
回复

with t as(
select '111111111111' id,to_date('2011-7-22 12:01','yyyy-MM-dd hh24:mi') date1 from dual
union all
select '111111111111' id,to_date('2011-7-22 12:06','yyyy-MM-dd hh24:mi') date1 from dual
union all
select '222222222222' id,to_date('2011-7-22 11:01','yyyy-MM-dd hh24:mi') date1 from dual
union all
select '222222222222' id,to_date('2011-7-22 12:03','yyyy-MM-dd hh24:mi') date1 from dual
union all
select '111111111111' id,to_date('2011-7-23 12:01','yyyy-MM-dd hh24:mi') date1 from dual
)

select tab.id,min(tab.date1)
from (
select t.id,t.date1,trunc(t.date1) tr
from t) tab
group by tab.id,tab.tr
hudingchen 2011-07-25
  • 打赏
  • 举报
回复
你给的数据按照什么字段排序的?没说清楚,先写一个

SQL> WITH t AS (
2 SELECT '111111111111' phone,TO_DATE('2011-7-22 12:00:01','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
3 SELECT '111111111111' phone,TO_DATE('2011-7-22 12:00:02','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
4 SELECT '222222222222' phone,TO_DATE('2011-7-22 12:00:03','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
5 SELECT '222222222222' phone,TO_DATE('2011-7-22 12:00:04','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
6 SELECT '222222222222' phone,TO_DATE('2011-7-22 12:00:05','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
7 SELECT '111111111111' phone,TO_DATE('2011-7-23 12:00:06','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
8 SELECT '111111111111' phone,TO_DATE('2011-7-23 12:00:07','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
9 SELECT '111111111111' phone,TO_DATE('2011-7-23 12:00:08','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
10 SELECT '333333333333' phone,TO_DATE('2011-7-23 12:00:09','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
11 SELECT '333333333333' phone,TO_DATE('2011-7-23 12:00:10','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
12 SELECT '333333333333' phone,TO_DATE('2011-7-23 12:00:11','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
13 SELECT '222222222222' phone,TO_DATE('2011-7-23 12:00:12','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL UNION ALL
14 SELECT '222222222222' phone,TO_DATE('2011-7-23 12:00:13','yyyy-mm-dd hh24:mi:ss') tdate FROM DUAL
15 )
16 SELECT m.phone,
17 TO_CHAR(m.tdate,'yyyy-mm-dd hh24:mi:ss') tdate
18 FROM (SELECT t.phone,
19 t.tdate,
20 ROW_NUMBER() OVER(PARTITION BY t.phone, TO_CHAR(tdate, 'yyyymmdd') ORDER BY t.tdate DESC) rn
21 FROM t) m
22 WHERE m.rn = 1
23 ORDER BY m.tdate,
24 m.phone
25 ;

PHONE TDATE
------------ -------------------
111111111111 2011-07-22 12:00:02
222222222222 2011-07-22 12:00:05
111111111111 2011-07-23 12:00:08
333333333333 2011-07-23 12:00:11
222222222222 2011-07-23 12:00:13

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧