2017-09-06 16 views
-1

ich meine Tabellenstruktur haben, wie unten in desc Reihenfolgemit doppelten Einträgen

sr group name status 
4 class11 ghanshyam Joined 
3 class11 ghanshyam Removed 
2 class11 ghanshyam suspended 
1 class11 ghanshyam joined 

Jetzt möchte ich alle Rekord in der Gruppe class11, deren Status holen entfernt.

So wird meine Abfrage

select * from table where group = 'class11' and status='Removed' group by name 

, aber jetzt hat Ghanshyam versetzte Gruppe nach Status entfernt und wir duplizieren Einträge, damit es nicht in Removed, gleiche gilt für gesperrtes Konto zählen sollte.

So wie kann ich gewünschte Zeile aus der Tabelle holen

+0

'sr' ist Primärschlüssel für diese Tabelle? –

+0

ja sr ist Primärschlüssel – praveen86

Antwort

0
SELECT t1.* from [table] t1 

INNER JOIN 

(SELECT MAX(sr) AS nsr ,[group] ,[name] FROM [table] GROUP BY [group] ,[name]) t2 

ON t2.nsr = t1.sr 
AND t1.status='Removed' 
+0

bin ich mit der richtigen Abfrage, dies gibt korrekte Ergebnis beim Ändern des Status von verbunden, entfernen, suspendiert ??? – praveen86

+0

ja es funktioniert – praveen86

+0

@ praveen86 Yeah .. froh, das zu hören :) Fühlen Sie sich frei, die Antwort zu verbessern. Auch die Antwort von Desai wird den Job machen. Also schätzen Sie ihre Bemühungen auch. :) – jophab

0

Sie sollten den Datensatz in allen Fällen wie folgt ab:

select * from table where group = 'class11' 

nach tun, dass Sie den letzten Status überprüfen können, ob seine entfernt oder verbunden .

+0

NEIN ich kann das nicht tun, weil ich Gesamtanzahl auf Basis von SQL-Abfrage mysql_num_row() und dann möchte ich Paginierung mit Limit – praveen86

+0

praveen tun, das ist etwas unklar, was genau Sie wollen. Können Sie bitte erklären, welche genaue Antwort Sie von Ihrer Anfrage in Ihrem Fall erwarten? –

+0

ghanshyam sollte nicht in Select * aus Tabelle wo Gruppe = 'Klasse11' und Status = 'Removed' Gruppe nach Name Abfrage kommen, sollte er nur für Join-Status kommen – praveen86

0

Try this:

SELECT * FROM yourTable WHERE group = 'class11' AND status ='Removed' AND (SELECT MAX(sr) FROM yourTable WHERE group = 'class11' AND status ='Joined') < sr GROUP BY name

Hoffnung, dass dies wird Ihnen helfen :) Rest für jede Klärung, fügen Sie bitte Kommentar.

0

Diese Abfrage es Aufzeichnungen erhalten, die für removed maximal id haben

SELECT * FROM tbl_name t WHERE t.sr IN 
    (SELECT max(t1.sr) FROM tbl_name t1 WHERE `group` = 'class11' GROUP BY t1.`name`) 
    AND t.status = 'Removed' 

prüfen also Geige: http://sqlfiddle.com/#!9/ef189a/1

Verwandte Themen