2016-08-05 71 views
-2

我有一個表如何從電話號碼中選擇第一個或最後一個值?

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調用一次叫2倍於2015年01 02 6112 調用一次於2015年01 03 6111調用一次於2015年01 03 6113稱爲 一次2015年01 03 6113叫一旦2015年01 04 6113調用一次,2015年01 05 6113調用一次,2015年01 06

+0

如果您指定了您期望的列和輸出,則更容易回答。按日期/數字分組? – dbmitch

回答

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

+0

謝謝你幾乎解決了我的理解。我需要多少人打電話給他們。 – Solution

+0

目前尚不清楚。你需要電話號碼,以及他們打了多少次......什麼時候?你需要他們打電話的總次數嗎?或者你需要多少次他們每個不同的日期?如果是這樣,哪個日期(s)......每個電話號碼的最近日期,還是表格中的所有日期?如果對於所有日期,結果將超過3行。請在原始文章中顯示所需的OUTPUT(通過手工計算,而不是通過查詢) - 查詢結果應該是什麼? – mathguy

+0

是的,我需要他們在表格中的所有日期的每個不同日期調用多少次。例如:6111呼叫 - 2015 01 01一次,6112呼叫2015年20150102兩次,20150103一次 請立即使用。謝謝 – Solution

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_numreg_date,那麼你可以只使用max

select tel_num, max(reg_date) 
from tel_num 
group by tel_num 

順便說一句 - 一般我不會名稱的列一樣的表...

相關問題