Sicht mit aktuellen Datensätzen aus zwei Tabellen

chg1988

Benutzer
Beiträge
5
Hallo zusammen,

ich möchte gern eine Sicht entwerfen, in der aus zwei Tabellen aktuelle Messwerte angezeigt werden.

In den beiden Tabellen werden unter einer eindeutigen ID mit Zeitstempel mehrmals am Tag Messwerte hinterlegt.

Nun möchte ich gerne beide Tabellen in einer Sicht darstellen, möchte aber auch nur den jeweils aktuellen Datensatz sehen.

Bei einer Tabelle mache ich Top 1 und Order by date desc.

nun sind das aber zwei Felder (jeweils Date) in den Tabellen. Wenn ich dann order by date desc nutze wird nur ein Datensatz aktuell dargestellt, der andere ist ein alter historischer Datensatz.

Ich hoffe man versteht mein Problem ;)

Danke und viele Grüße
 
Werbung:
Ich glaube zu verstehen.

Du willst zu jeder eindeutigen ID aus Tabelle A den aktuellsten Messwert haben und zu jeder eindeutigen ID aus Tabelle B den aktuellsten Messwert haben. Dafür gibt es verschiedene Möglichkeiten, willst du die sich daraus ergebenden Messwerte neben einander stellen oder einfach nur im Ergebnisse Zeilen aus beiden Tabellen ausgeben?

Was passiert, wenn ein Messwert in A deutlich aktueller ist als in B, soll dann eventuell kein Messwert für B angezeigt werden?
 
Hier mal ein Beispiel, das sicherlich erstmal verwirren mag:
Code:
WITH tbl_A(zeitstempel,id,wert) AS (
    SELECT getdate(),1,1000 UNION ALL
    SELECT dateadd(day,-1,getdate()),1,999 UNION ALL
    SELECT dateadd(day,-2,getdate()),1,998
    ), tbl_B(zeitstempel,id,wert) AS (
    SELECT dateadd(day,-1,getdate()),1,999 UNION ALL
    SELECT dateadd(day,-2,getdate()),1,998 UNION ALL
    SELECT getdate(),2,3 UNION ALL
    SELECT dateadd(day,-1,getdate()),2,2 UNION ALL
    SELECT dateadd(day,-2,getdate()),2,1
    )
SELECT    *
FROM    (

SELECT    a.*
FROM    (

SELECT    ROW_NUMBER() OVER (PARTITION BY id ORDER BY zeitstempel DESC) AS zeile,
        *
FROM    tbl_A

        ) a
WHERE    a.zeile = 1

        ) a1
FULL OUTER JOIN (

SELECT    b.*
FROM    (

SELECT    ROW_NUMBER() OVER (PARTITION BY id ORDER BY zeitstempel DESC) AS zeile,
        *
FROM    tbl_B

        ) b
WHERE    b.zeile = 1

        ) b1
ON        a1.id = b1.id
 
Wenn es nur um jeweils einen Datensatz geht und beide sollen nebeneinander dargestellt werden:
select wertVonA, datumVonA, wertVonB, datumVonb from
( select top1 <wert> as wertVonA, <datumsfeld> as datumVonA from taba order by <datumsfeld> ) a,
( select top1 <wert> as wertVonB, <datumsfeld> as datumVonb from tabb order by <datumsfeld> ) b

Falls die Messzeiten nur unwesentlich abweichen, kann man einen Datumswert natürlich weglassen.
Aber: dieses Statement kann dazu führen, dass gar kein Datensatz angezeigt wird, wenn eine Menge leer ist.
 
Werbung:
Zurück
Oben