Jump to content

Frage an die SQL Profis


Aikonia

Empfohlene Beiträge

Hi Leute,

 

hatte da grad ne Idee, wie ich mir viel Arbeit sparen könnte, kann sie leider nicht umsetzen, also folgende Prinziptabelle:

 

 

Artikel - Revision - Archiviert

1		  1		  J	 
1		  2		  N
1		  3		  N
2		  1		  J
2		  2		  N
3		  1		  J

 

 

Interessant sind alle Artikel, bei denen in Revision < max noch keine Archivierung eingetragen ist. Also in diesem Fall sollte als Ergebnis so aussehen

 

Artikel - Revision - Archiviert

1		  2		  N

 

 

 

 

Wär echt ne große Hilfe ^_^

 

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Admin

Könnte so aussehen >> select artikel,revision,archiviert from where archiviert='N';

 

Wenns sortiert werden soll dann >> select artikel,revision,archiviert from where archiviert='N' order by ;

 

Brauchbare SQL-Kurzreferenz findest du hier.

 

 

 

 

http://www.inweb.de/chetan/Deutsch/Ressourcen/SQL.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Könnte so aussehen >> select artikel,revision,archiviert from <Prinziptabelle> where archiviert='N';

 

Wenns sortiert werden soll dann >> select artikel,revision,archiviert from <Prinziptabelle> where archiviert='N' order by <z.B.: Artikel>;

 

Brauchbare SQL-Kurzreferenz findest du hier.

 

http://www.inweb.de/chetan/Deutsch/Ressourcen/SQL.html

 

Hi,

 

Danke erstmal, gut dann bekomm ich alle Einträge, die noch nicht archiviert sind, müsste dann noch immer die höchste Revision aus der Auswahl entfernen,

habe gehofft, man kann pro Artikel die höchste Revision "ausblenden" ^_^

Link zu diesem Kommentar
Auf anderen Seiten teilen

du brauchst eine zusätzliche (eindeutige) id-spalte in der tabelle

dann geht es wie folgt:

 

SELECT *
FROM t0
WHERE
(
NOT	(id IN
(
	SELECT t3.id
	FROM t0 AS t3
	INNER JOIN (SELECT Artikel, MAX(Revision) AS MaxRevision FROM t0 AS t2
	GROUP BY Artikel) AS t1 ON t3.Artikel = t1.Artikel AND t3.Revision = t1.MaxRevision
)
)
) 
AND t0.Archiviert = 'N'

 

"t0" ist dein tabellenname...

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Admin

Sag mal welche Datenbank du verwendest dann kann ich dir auch ein passendes Query bauen.

 

Hier mal ein Beispiel wie es laufen könnte.( Datenbank ist Access )

 

SELECT Tabelle1.Artikel, First(Tabelle1.Revision) AS Revision, Tabelle1.Archiviert

FROM Tabelle1

GROUP BY Tabelle1.Artikel, Tabelle1.Archiviert

HAVING (((Tabelle1.Archiviert)="N"));

 

Bei dieser Testtabelle bringt das Query dann immer das erste Ergebnis das passt, also die kleinste "Revisonsnummer" die noch nicht archiviert wurde, wichtig dabei ist dass die Reihenfolge in der Tabelle stimmt.

Es muss ein Index auf das Feld "Revision" gelegt werden und dieser dann selektiert werden.

Der Primary-Key alleine genügt nicht da die Einträge in der Tabelle ja beliebig erfolgen können.

 

Edit @Gandal: @Rudolf11 war schneller ^_^

testtable.jpg

query.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

  • Wer ist Online   0 Benutzer

    • Keine registrierten Benutzer online.
×
×
  • Neu erstellen...