Autor |
Beitrag |
Bronstein
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: Do 28.07.11 19:44
Hallo,
ich habe eine Datenbank mit den folgenden zwei Tabellen, sind natürlich mehr aber meine Abfrage soll sich auf diese beiden beschränken:
Tabelle 1: DATEN
Mit den Spalten SERNR, DATUM, NAME, STAT_ID
Tabelle 2: STAT
Mit den Spalten STAT_ID, NAME, TYP
Die SQL-Abfrage soll folgendes Bedingungen erfüllen:
1) Alle SERNR mit dem spätesten DATUM
2) nur die SERNR bei denen der TYP = 1 und das DATUM >= 01.01.2011 ist
3) SERNR die schon beim TYP 99 sind sollen nicht auftauchen
SQL-Anweisung 1: 2: 3: 4:
| SELECT DATEN.SERNR, Max(DATUM) AS DATUM, DATEN.NAME, STAT.TYP FROM DATEN INNER JOIN STAT ON DATEN.STAT_ID = STAT.STAT_ID GROUP BY DATEN.SERNR, DATEN.NAME, STAT.TYP HAVING STAT.TYP<>99 AND (DATUM>= |
Dachte mir die Abfrage in etwa so, doch leider funktioniert dies nicht!
_________________ Es gibt keine dummen Fragen nur dumme Antworten!!!
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Do 28.07.11 19:51
a)Welche Datenbanksoftware? Wegen #datum# tippe ich auf Access?
b) Was genau möchtest Du tun?
Ich vermute es gibt einen Status mit bestimmten Namen und Typ,
und 0-n Sätze in DATEN weisen diesen Status auf.
du möchtest für jeden Satz in STAT den Satz aus DATEN
angezeigt bekommen welcher das höchste Datum hat (und weitere Kriterien)?
|
|
Bronstein 
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: Do 28.07.11 20:16
Mit Hilfe des Typs ermittlet man in welchem Fertigungschritt das Produkt (Name) ist.
Hier mal ein paar Bsp. Datensätze der Tabelle TYP:
STAT_ID, NAME, TYP
1, Station1, 1
2, Station1, 2
3, Station1, 3
Hier ein paar Bsp. Datensätze der Tabelle DATEN
SERNR, DATUM, NAME, STAT_ID
001, 01.05.2011 05:00, Produkt1, 1
001, 01.05.2011 05:20, Produkt1, 2
001, 01.05.2011 05:50, Produkt1, 3
002, 01.05.2010 05:50, Produkt1, 1
003, 01.05.2011 01:50, Produkt1, 1
003, 01.05.2011 05:50, Produkt1, 99
Hierbei sollte jetzt herauskommen
001, 01.05.2011 05:50, Produkt1, 3
002 nicht, da das Datum vom Stat 1 älter als 01.01.2011 ist
003 nicht, da der Status 99 ist, der Status 99 bedeutet dass das Produkt fehlerhaft war und es somit Ausschuss ist
Hoffe das hilft weiter!
_________________ Es gibt keine dummen Fragen nur dumme Antworten!!!
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Do 28.07.11 21:01
Würde dies passen? (hier mal mit Access, andere DBs: Format für Datum anders)
select d1.sernr, d1.datum,d1.name, d1.stat_id from daten d1
where d1.datum=(select max (datum) from daten d2 where d2.sernr=d1.sernr)
and d1.stat_id<>"99" and d1.datum >=#1-1-2011#
|
|
Bronstein 
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: Do 28.07.11 21:23
Hi,
nein passt noch nicht. Für die Fallbeispiele die ich gebracht habe passt es kommt das richtige raus:
001, 01.05.2011 05:50, Produkt1, 3
Ändere ich jedoch den ersten Datensatz auf 2010:
001, 01.05.2010 05:00, Produkt1, 1
Kommt trotzdem das gleiche herraus:
001, 01.05.2011 05:50, Produkt1, 3
Ich möchte aber nur die SerNr die dieses Jahr begonnen wurden produziert zu werden, sprich diese Bedingung ist nicht erfüllt:
2) nur die SERNR bei denen der TYP = 1 und das DATUM >= 01.01.2011 ist
_________________ Es gibt keine dummen Fragen nur dumme Antworten!!!
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Do 28.07.11 21:33
Ich verstehe nicht ganz...
Gesucht sind die neuesten.. Das ist Satz 3.
Wenn ich nun den "äteren" Satz 1 noch älter mache ändert das nichts
Moment.. Das mit dem Startdatum hast Du jetzt erst gesagt.
SELECT d1.sernr, d1.datum, d1.name2, d1.stat_id
FROM daten AS d1
WHERE d1.datum=(select max (datum) from daten d2 where d2.sernr=d1.sernr)
and d1.stat_id<>"99"
and d1.sernr not in (select sernr from daten where datum <#1-1-2011#)
|
|
Bronstein 
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: Do 28.07.11 21:38
Super danke dir,
das mit dem Startdatum habe ich vielleicht etwas unklar ausgedrück. Wollte ich mit dem sagen:
2) nur die SERNR bei denen der TYP = 1 und das DATUM >= 01.01.2011 ist
_________________ Es gibt keine dummen Fragen nur dumme Antworten!!!
|
|
|