2016-04-04 5 views
1

Ich muss in der Lage sein, eine Zeile basierend auf einem Wert der vorherigen Zeile auszuwählen. der Tabelle:Wählen Sie eine Zeile in Mysql abhängig von einem Wert eines Feldes in der benachbarten Zeile

id  value 
---  --- 
1  D 
2  D 
3  N 
4  P 
5  P 
6  P 

ich nur mit ID 4, um Zeile wollen, weil die Zeile mit ID = 3 hatte Wert "N"

Also muss ich smth tun wie:

SELECT 
id as current_id, 
value 
FROM 
table 
WHERE 
(SELECT id FROM table WHERE "current_id" - 1) = "N" 
+0

nicht funktionierts? – Phiter

+0

das gibt mir "Unbekannte Spalte 'current_id' in 'Where-Klausel'" – AnKing

Antwort

1

versuchen Sie dies:

SELECT id AS current_id 
, value 
FROM table 
WHERE id IN (SELECT id + 1 FROM table WHERE value = "N") 

Edit:
Vermietung ist als o einfache Art und Weise mit nicht zusammenhängenden IDs:

SELECT current_id, value 
FROM (SELECT value 
    , @old_id AS old_id 
    , @old_id := id AS current_id 
    FROM table, (SELECT @old_id := 0) AS v 
    ORDER BY current_id) AS sq 
WHERE exists (SELECT id FROM table AS o WHERE o.value = "N" AND o.id = sq.old_id) ; 
+0

Problem mit dieser Abfrage ist, dass es zusammenhängende IDs annimmt. – Mihai

+0

ja, aber Beispiel haben zusammenhängenden IDs ... –

+0

Antwort von Mihai funktioniert auch, aber ich werde diese verwenden, weil ich es einfacher bin, und ich habe zusammenhängende IDs, Danke! – AnKing

1

Das ist ein bisschen aufwendig, aber es funktioniert

SELECT o.id,o.value 
FROM 
(SELECT @rank:[email protected]+1 AS rank, id,value, 
CASE WHEN value='N' THEN @rank+1 ELSE 0 END as desiredId 
    FROM orders,(SELECT @rank:=0)x 
ORDER BY id ASC)y 
JOIN orders o ON 
o.id=y.desiredId 

FIDDLE

Verwandte Themen