如何从电话号码中选择第一个或最后一个值?

时间:2016-08-05 01:23:27

标签: sql oracle select

我有一个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

2 个答案:

答案 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)。