2016-08-05 15 views
-2

Ich habe eine TabelleWie wähle ich den ersten oder letzten Wert von Telefonnummern aus?

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 | 
    +----+---------+----------+ 

In meinem Fall habe ich Datensatz anzuzeigen nur 3 Zeilen, weil es nur 3 Tel.-Nummer mit verschiedenen aktuellen Stand ist. Wie wählt man eine Telefonnummer? Sollte ich max Datum verwenden? Ich brauche, wie oft sie jedes andere Datum für alle Daten in der Tabelle aufgerufen haben. Wie diese Informationen:

6111 einmal aufgerufen, 2015 01 01 6112 genannt 2-mal auf 2015 01 02 6112 einmal aufgerufen, 2015 01 03 6111 genannt einmal auf 2015 01 03 6113 genannt einmal 2015 01 03 6113 genannt einmal 2015 genannt 01 04 6113 einmal 2015 01 05 6113 einmal 2015 genannt 01 06

+0

Leichter zu beantworten, wenn Sie die Spalten und Ausgaben angeben, die Sie erwarten. Gruppieren nach Datum/Nummer? – dbmitch

Antwort

1

Es ist nicht klar, was Sie brauchen. Nur die Telefonnummern? Dann benutze SELECT DISTINCT. Die Telefonnummer und das neueste reg_date für jede Telefonnummer? Dann enthält GROUP BY tel_num und in der SELECT-Klausel MAX (reg_date). Wenn nicht, was dann?

EDIT: Basierend auf weiteren Eingaben von OP - er braucht Anrufer TEL_NUM, das REG_DATE, und wie oft dieser Anrufer an diesem Datum angerufen hat. Dies ist ein Job für die Aggregatfunktion COUNT (*).

select tel_num, reg_date, count(*) as cnt 
from  table_name 
group by tel_num, reg_date 
; 

Sie müssen möglicherweise ORDER BY TEL_NUM, REG_DATE hinzufügen (oder, wenn Sie es in die andere Richtung brauchen um, ORDER BY REG_DATE, TEL_NUM).

+0

Danke fast gelöst, dass ich verstanden habe. Ich brauche wie viele sie angerufen haben. – Solution

+0

Es ist immer noch nicht klar. Brauchen Sie die Telefonnummer und wie oft sie angerufen haben .... wann? Brauchen Sie die Gesamtzahl der Anrufe? Oder brauchst du, wie oft sie jedes andere Datum angerufen haben? Und wenn ja, für welches Datum (s) ... nur das letzte Datum für jede Telefonnummer oder für alle Daten in der Tabelle? Wenn für alle Daten das Ergebnis mehr als 3 Zeilen ist. Bitte zeigen Sie die gewünschte OUTPUT in Ihrem ursprünglichen Post (berechnet von Hand, nicht durch eine Abfrage) - Was sollte das Ergebnis der Abfrage sein? – mathguy

+0

Ja, ich brauche, wie oft sie jedes andere Datum für alle Daten in der Tabelle aufgerufen haben. Zum Beispiel: 6111 angerufen - einmal am 01.01.2015, 6112 angerufen 2 mal am 2015 20150102 und einmal am 20150103 Bitte ich brauche es sofort. Danke – Solution

1

Sie die id benötigen Unter der Annahme, hier eine Option ist mit 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 

Wenn Sie nur die tel_num und reg_date benötigen, dann können Sie mit nur max:

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

Btw - im Allgemeinen würde ich nicht Spalten die gleiche wie der Name der Tabelle ...