我有一个TABLE
select * from TEL_NUM
+----+---------+----------|
| id | TEL_NUM |REG_DATE |
+----+---------+----------+
| 1 | 6111 |20150101 |
| 2 | 6112 |20150102 |
| 3 | 6112 |20150102 |
| 4 | 6112 |20150103 |
| 5 | 6111 |20150103 |
| 6 | 6113 |20150103 |
| 7 | 6113 |20150104 |
| 8 | 6113 |20150105 |
| 9 | 6113 |20150106 |
+----+---------+----------+
在我的情况下,我必须只显示3行记录,因为只有3个电话号码具有不同的日期。
如何逐个选择电话号码?我应该使用max
日期吗?
我需要为表格中的所有日期在每个不同的日期调用多少次。喜欢这个信息:
6111在2015 01 01 6112召开一次,2015年01 02 6112召集2次 2015年01 03 6111召开一次2015年01 03 6113召集一次 一旦2015 01 03 6113召唤一次2015 01 04 6113召唤一次2015 01 05 6113一次叫2015 01 06
答案 0 :(得分:1)
假设您需要使用--force
的{{1}},这是一个使用id
的选项:
row_number
如果您只需要select *
from (
select id, tel_num, reg_date,
row_number() over (partition by tel_num order by regdate desc) rn
from tel_num
) t
where rn = 1
和tel_num
,那么您可以使用reg_date
:
max
顺便说一下 - 一般来说,我不会将列命名为与表格相同的...
答案 1 :(得分:1)
不清楚你需要什么。只是电话号码?然后使用SELECT DISTINCT。每个电话号码的电话号码和最近的reg_date?然后GROUP BY tel_num和SELECT子句中包含MAX(reg_date)。如果不是,那么呢?
编辑:基于来自OP的进一步输入 - 他需要来电者TEL_NUM,REG_DATE以及该来电者在该日期呼叫的次数。这是聚合函数COUNT(*)的作业。
select tel_num, reg_date, count(*) as cnt
from table_name
group by tel_num, reg_date
;
您可能需要添加ORDER BY TEL_NUM, REG_DATE
(或者如果您需要相反,ORDER BY REG_DATE, TEL_NUM
)。