Autor Beitrag
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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

ausblenden 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>=#01.01.2011# and TYP=1)


Dachte mir die Abfrage in etwa so, doch leider funktioniert dies nicht!

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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!!!