2016-10-24 2 views
2

In meiner Tabelle habe ich einige Datensätze und sie haben einige doppelte Geburtsdaten, so dass ich die id jener Leute, die übereinstimmenden Jahr haben wollen und nur Monat.Wie ID von jenen Personen, die übereinstimmenden Monat und Jahr haben nur in dob Spalte

Ich erhalte Ausgabe wie folgt:

enter image description here

aber meine Erwartung ist:

id dob(column name of table bday) 

1 1989-12 
3 1989-12 
4 1985-11 
6 1985-11 

MySQL Query # 1:

SELECT id, dob 
FROM bday 
WHERE dob IN (
    SELECT dob 
    FROM bday 
    GROUP BY dob 
    HAVING COUNT(id) > 1 
) 

MySQL Query # 2:

SELECT EXTRACT(YEAR_MONTH from dob) FROM bday group by dob having count(*) >1 

Hier erhalte ich folgende Ausgabe:

id dob(column name of table bday) 
1 1989-12-22 
3 1989-12-22 
4 1985-11-27 
6 1985-11-27 

Aber ich will eigentlich nur das Jahr und Monat mit den id.

Antwort

0
SELECT EXTRACT(YEAR_MONTH from date) 
FROM table group by date having count(*) >= 2 

versuchen, diese

select YEAR(date) AS 'year', MONTH(date) AS 'month' COUNT(*) c FROM table GROUP BY column HAVING c > 1 
+0

Obwohl dieser Code helfen kann löse das Problem, es erklärt nicht, warum und/oder wie es die Frage beantwortet. Die Bereitstellung dieses zusätzlichen Kontextes würde seinen langfristigen Bildungswert erheblich verbessern. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen, einschließlich der Einschränkungen und Annahmen. –

+0

es funktioniert nicht Ich brauche ID dob Spalte bco'z ID verweisen, dass doppelte Person so extrahieren machen neue colum wie dies ich bekomme Ausgabe extrahieren (YEAR_MONTH von dob) = 198912 Ich werde noch einmal meine Frage aktualisieren, überprüfen Sie diese – faiz

+0

@faiz überprüfen oben bearbeite ich meine Antwort – mhmd

1

See this post

Antwort:

SELECT 
id, DATE_FORMAT(dob, '%m-%d') AS date_month 
FROM users 
WHERE 
DATE_FORMAT(dob, '%Y-%m') IN 
(
    SELECT 
     DATE_FORMAT(dob, '%Y-%m') AS date_month 
    FROM users 
    GROUP BY DATE_FORMAT(dob, '%Y-%m') 
    HAVING count(id) >1) ; 
) 

Erläuterung:

Das erste, was Sie erreichen müssen, ist zu

„erhalten alle Datum und Monat 'dob' Spalte "

Dies kann durch Gruppieren von Zeilen basierend auf date_month erreicht werden, die mit dem Formatkonstrukt extrahiert wurden.

SELECT 
DATE_FORMAT(dob, '%m-%d') AS date_month 
FROM bday 
GROUP BY DATE_FORMAT(dob, '%m-%d'); 

Wie pro Ihrer Frage, Weiter sind

„Völker, die passende Jahr und Monat nur“

dh Gruppe der obigen Ergebnisse mit Zustand mehr als eine Zeile mit. Diese kann durch Hinzufügen der Bedingung "HAVING count (id)> 1"

nun erreicht werden, die Abfrage wird

SELECT 
DATE_FORMAT(dob, '%m-%d') AS date_month 
FROM bday 
GROUP BY DATE_FORMAT(dob, '%m-%d') 
HAVING count(id) >1); 

Diese Abfrage liefert alle date_month denen mehr als eine Person, die dob fällt.

Jetzt ist Ihr Ziel ist

„id jener Völker, die passende Jahr und Monat nur“ zu bekommen

Dies kann durch Umwickeln dies führt zu einer Sub-Abfrage erreicht werden. dh Sie haben alle IDs mit Datum und Monat holen fällt in den Satz von Ergebnissen

SELECT 
id, DATE_FORMAT(dob, '%m-%d') AS date_month 
FROM bday 
WHERE 
DATE_FORMAT(dob, '%m-%d') IN 
(
    SELECT 
    DATE_FORMAT(dob, '%m-%d') AS date_month 
    FROM bday 
    GROUP BY DATE_FORMAT(dob, '%m-%d') 
    HAVING count(id) >1) ; 
) 

Struktur My table structure

Daten in der Tabelle Meine Tabelle mit der vorherigen Abfrage extrahiert My entries

Abfrage und Ergebnisse Query and results

+0

Jungs es nicht wirklich funktioniert, was ich – faiz

+0

wünschen Edited meine Antwort – Ima

+0

Hallo @lma danken ist viel es für mich arbeiten, Sie sind brillant – faiz

Verwandte Themen