Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MSSQL Datensätze mit neuestem Datum

MSSQL Datensätze mit neuestem Datum
11.05.2020 10:04:11
Josef
Hallo Zusammen,
ich weiß das es hier hauptsächlich um Excel geht, allerdings versuche ich eine SQL Abfrage zu erstellen, die ich mir ins Excel importieren möchte und komme hierbei einfach nicht weiter und hoffe, dass es hier auch den ein oder anderen SQL Profi gibt. Jedenfalls habe ich eine Datenbank mit mehreren Spalten und ich versuche über SQL eine Abfrage zu erstellen, die mir von jedem Artikel nur den Datensatz mit dem neusten Datum anzeigt.
Meine Tabelle:
Artikel Beschreibung Dauer Datum
1 Auto 55 01.04.2020
2 Fahrrad 3 25.03.2020
3 E-Bike 2 25.02.2020
4 Roller 1 14.03.2020
1 Auto 4 20.01.2020
2 Fahrrad 5 21.03.2020
4 Roller 15 30.03.2020
3 E-Bide 24 10.03.2020
Das Ergebnis sollte wie folgt aussehen:
Artikel Beschreibung Dauer Datum
1 Auto 55 01.04.2020
4 Roller 15 30.03.2020
2 Fahrrad 3 25.03.2020
3 E-Bide 24 10.03.2020
Ich habe schon sämtliche Abfragen im Inet ausprobiert. Leider funktioniert keines davon mit MSSQL
Vlt habt ihr eine Idee, wie ich es in MSSQL lösen kann.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 10:34:03
ChrisL
Hi
Der Name der Inputdaten lautet Tabelle1. Tabelle2 existiert nur virtuell.
SELECT Tabelle2.Artikel, Tabelle1.Beschreibung, Tabelle1.Dauer, Tabelle2.[Max-Datum]
FROM Tabelle1 INNER JOIN (SELECT Tabelle1.Artikel, Max(Tabelle1.Datum) AS [Max-Datum] FROM Tabelle1 GROUP BY Tabelle1.Artikel) AS Tabelle2 ON (Tabelle2.Artikel = Tabelle1.Artikel) AND (Tabelle2.[Max-Datum] = Tabelle1.Datum);
cu
Chris
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 11:28:01
Josef
Hallo Chris,
danke für deine Hilfe, aber das funktioniert so leider nicht. Ich erhalte folgenden Fehler "Inkorrekter Spaltenausdruck: Tabelle2".
Wäre es möglich, dass du meine SQL-Abfrage direkt bearbeitest? Die sieht momentan wie folgt aus:
SELECT "Firma$Item"."Artikel", "Firma$Item"."Beschreibung", "Firma$Item"."Dauer", "Firma$Item"."Buchungsdatum"
FROM "Datenbank".dbo."Firma$Item" "Firma$Item"
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 12:06:25
ChrisL
Hi
Was soll ich schon anpassen. Der gezeigte String ist fertig und getestet. Nur noch Tabelle1 durch deinen Tabellennamen ersetzen.
Tabelle2 ist der Alias (AS Tabelle2) d.h. den Namen einfach lassen wie es ist.
Hier werden die zwei verschachtelten Abfragen erklärt.
https://www.sql-und-xml.de/sql-praxis/detailtabelle-aggregatfunktion-einzelzeilen.html
Wenn du es so nicht hin bekommst, dann mach halt zwei separate Abfragen resp. später verschachteln.
cu
Chris
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 13:16:41
Josef
Nun habe ich es endlich hinbekommen. Nur leider bekomme ich mehrere Datensätze von ein und dem selben Artikel zurück gemeldet, sobald sich die Daten in der Spalte Beschreibung oder Dauer unterscheiden.
Des Weiteren habe ich auch eine Where Klausel eingefügt, die total ignoriert wird?
So sieht aktuell mein Code aus und ich weiß nicht wo der Fehler liegt:
SELECT Tabelle2."Artikel", "Firma$Item"."Dauer", "Firma$Item"."Beschreibung", Tabelle2.[MaxDat]
from "EBE-GROUP".dbo."Firma$Item" "Firma$Item"
INNER JOIN (SELECT "Firma$Item"."Artikel", Max("Firma$Item"."Buchungsdatum") AS [MaxDat]
FROM "Datenbank".dbo."Firma$Item" "Firma$Item"
where ("Firma$Item"."Dauer" größer 1)
GROUP BY "Firma$Item"."Artikel") AS Tabelle2 ON (Tabelle2."Artikel" ="Firma$Item"."Artikel") AND (Tabelle2.[MaxDat] = "Firma$Item"."Buchungsdatum")
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 13:37:26
Josef
Nun habe ich es endlich hinbekommen. Nur leider bekomme ich mehrere Datensätze von ein und dem selben Artikel zurück gemeldet, sobald sich die Daten in der Spalte Beschreibung oder Dauer unterscheiden.
Des Weiteren habe ich auch eine Where Klausel eingefügt, die total ignoriert wird?
So sieht aktuell mein Code aus und ich weiß nicht wo der Fehler liegt:
SELECT Tabelle2."Artikel", "Firma$Item"."Dauer", "Firma$Item"."Beschreibung", Tabelle2.[MaxDat]
from "EBE-GROUP".dbo."Firma$Item" "Firma$Item"
INNER JOIN (SELECT "Firma$Item"."Artikel", Max("Firma$Item"."Buchungsdatum") AS [MaxDat]
FROM "Datenbank".dbo."Firma$Item" "Firma$Item"
where ("Firma$Item"."Dauer" größer 1)
GROUP BY "Firma$Item"."Artikel") AS Tabelle2 ON (Tabelle2."Artikel" ="Firma$Item"."Artikel") AND (Tabelle2.[MaxDat] = "Firma$Item"."Buchungsdatum")
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 13:42:57
ChrisL
Hi
Ich kann weder das eine noch das andere nachvollziehen. Bei mir läufts korrekt.
Die erste Selektion (alias Tabelle2) kannst du ja auch isoliert mal testen.
SELECT "Firma$Item"."Artikel", Max("Firma$Item"."Buchungsdatum") AS [MaxDat]
FROM "Datenbank".dbo."Firma$Item" "Firma$Item"
WHERE ("Firma$Item"."Dauer" > 1)
GROUP BY "Firma$Item"."Artikel")
Anschliessend werden ja nur noch die fehlende Beschreibung und Dauer hinzugefügt.
cu
Chris
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 13:58:30
Josef
So würde ich das richtige Ergebnis erhalten, nur eben halt ohne die zwei Spalten Beschreibung und Dauer. Allerdings benötige ich diese 2 Spalten :-(
Noch eine Idee?
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 14:08:31
Josef
Hallo Chris,
ich weiß nun wo das Problem liegt. Es liegt daran, das am dem selben Buchungstag 2 oder Eintäge vorhanden sein können. Dann spuckt mir die Abfrage natürlich auch mehrere Datensätze aus. Und dieses Problem bekomme ich nur dann gelöst, wenn ich das mit der Where Klausel hinbekomme :-(
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 14:54:48
ChrisL
Hi Josef
So könnte es gehen...
SELECT Tabelle3.Artikel, Tabelle4.Beschreibung, Tabelle4.Dauer, Tabelle3.MaxDat
FROM (SELECT Tabelle2.Artikel, Max(Tabelle2.Datum) AS MaxDat
FROM (SELECT Tabelle1.Artikel, Tabelle1.Beschreibung, Tabelle1.Dauer, Tabelle1.Datum
FROM Tabelle1
WHERE (Tabelle1.Dauer)>1) AS Tabelle2
GROUP BY Tabelle2.Artikel) AS Tabelle3 INNER JOIN (SELECT Tabelle1.Artikel, Tabelle1.Beschreibung, Tabelle1.Dauer, Tabelle1.Datum
FROM Tabelle1
WHERE (Tabelle1.Dauer)>1) AS Tabelle4 ON (Tabelle3.Artikel = Tabelle4.Artikel) AND (Tabelle3.MaxDat = Tabelle4.Datum);
Habe selber den Überblick verloren, was jetzt welche Tabelle ist. Aber grundsätzlich gibt es zwei Alias-Tabellen, welche die Original-Daten, jedoch gefiltert (ohne 0) enthalten.
Mit der einen virtuellen Tabelle machst du normal deine Abfrage d.h. Max-Datum und aggregieren. Die andere dient dazu, die Beschreibung und Dauer am Schluss wieder hinzuzufügen.
cu
Chris
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
11.05.2020 17:21:21
ChrisL
Nochmals kurz erklärt.
Tabelle1 = Rohdaten
Tabelle2:
(SELECT Tabelle1.Artikel, Tabelle1.Beschreibung, Tabelle1.Dauer, Tabelle1.Datum
FROM Tabelle1 WHERE Tabelle1.Dauer>1) AS Tabelle2
Tabelle1 wird durch die virtuelle Tabelle2 ersetzt und du arbeitest in der Folge mit dieser gefilterten "Datenkopie".
Die gleiche "Kopie" erfolgt später nochmal. Tabelle4:
(SELECT Tabelle1.Artikel, Tabelle1.Beschreibung, Tabelle1.Dauer, Tabelle1.Datum
FROM Tabelle1 WHERE Tabelle1.Dauer>1) AS Tabelle4
Tabelle3:
Jetzt aus Tabelle2 die Artikelnummer und Max(Datum) selektieren und gruppieren. Ergibt Alias Tabelle3. (beachte: Selektion erfolgt auf Tabelle2 und nicht mehr wie ursprünglich auf Tabelle1)
Anschliessend Tabelle 3 und 4 verbinden (join).
Die ganze Abfrage ist daher eigentlich wie gehabt. Nur dass du diese eben nicht mehr auf Tabelle1, sondern auf den gefilterten Daten Tabelle2 und Tabelle4 aufbaust.
Anzeige
AW: MSSQL Datensätze mit neuestem Datum
12.05.2020 07:01:14
Josef
Hallo Chris,
ich konnte es gestern leider nicht mehr testen.
Heute allerdings war es das Erste was ich versucht habe. Und siehe da... Es funktioniert :-D
Ich bin dir echt sehr dankbar. Das erspart mir den Import von über 100.000 Datensätze (was eeeewig gedauert hat).
Und Danke dafür, dass du mir das Ganze noch einmal erklärt hast. Ich bin echt ein Newbie was SQL Abfragen betrifft und das hilft mir wieder ein wenig mehr, Abfrage zu verstehen.
Gruf Josef

55 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige