![]() |
Datenbank: Absolute Datebase • Version: 4.89 • Zugriff über: Absolute Database/Dataset
Wie mehrere Datensätze m.gleichen Feldwerten zusammenführen?
Hallo,
ich habe mal eine Frage. Gegeben sei eine temporäre Importdatenbanktabelle. Diese soll mit einer CSV Datei, die von einem anderen Programm erstellt wird, gefüllt werden und später in einem Datengitter angezeigt werden. Diese CSV Datei sieht wie folgt aus: Zitat:
Wie löst man dies am sinnvollsten?? Ich habe bis jetzt eine
Delphi-Quellcode:
Man könnte nach "lese_ein" einfach einen Datensatz weiter schauen und dort überprüfen, ob das gleiche Datum und die gleiche Uhrzeit vorhanden ist und dann die Daten zusammenführen. Leider sind es mal zwei und mal drei gleiche Datensätze. Vier und mehr ist zwar ganz selten, kann aber auch theoretisch vorkommen.
dataset.first
while not dataset.eof do begin lese_ein; dataset.next; end; Kann man das vielleicht über SQL Befehle lösen? Oder gibt es da noch andere Lösungswege? Schon mal danke für eure Tipps und Hinweise. |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Hallo Holger,
probiere es mal mit SELECT * FROM Tabelle GROUP BY Datum, Zeit, MAX(Wert1), MAX(Wert2), MAX(Wert3) ... Freundliche Grüße |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Hallo Achim,
vielen Dank für die Infos :thumb: , werde das heute Abend mal ausprobieren. |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Hallo noch mal,
mit der SQL Abfrage hat das nicht geklappt, weil die Absolute Database vielleicht den SQL MAX Befehl u.U so nicht unterstützt und weil die Daten in den einzelnen Spalten bei gleicher Uhrzeit und Datum auch mal mehrfach vorkommen können (siehe Beispiel). Das hatte ich vorher aber in der CSV Datei nicht entdecken können. Zitat:
rauszufiltern. :gruebel: |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
SQL-Code:
SELECT datum, zeit, Sum(Wert1), ..., Sum(Wertx) FROM Tabelle GROUP BY Datum, Zeit;
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Lege zuerst mal eine Stored Procedure in der DB an. Meine Glaskugel meint, mit "zusammenführen" sei eine Addition gemeint, eventuell auch ein Überschreiben. So lange das nicht gesagt wurde, macht eine genaue Antwort keinen Sinn. Deshalb bur kurz skizziert :
1. Daten einlesen 2. Übergabe an Parameter der SP innerhalb der SP : anhand der Input Parameter Datum und Uhrzeit mit einem SELECT suchen, ob was gleiches da ist. Falls nicht : INSERT. Anderennfalls UPDATE und für eine Addition wäre dann noch so eine Zeile nötig :
SQL-Code:
SET FELDX = FELDX + :PARAM;
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Sorry, ich klare die Glaskugel mal etwas auf. :oops:
Es ist nicht sinnvoll die Daten mit gleichem Datum und gleicher Uhrzeit in z.B. zwei, drei oder mehr Datensätzen abzuspeichern. Das verwirrt den Anwender. Ich möchte also nicht eine Summe, einen Durchschnitt oder ähnliches der Spalten bilden, ich möchte nur aus zwei oder drei Datensätzen einen! Datensatz machen. (wenn Datum und Uhrzeit exakt gleich). :???: Hoffe ich habe jetzt die Situation besser beschrieben. |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Aus diesem Beispiel würde dann...
Zitat:
Zitat:
Grund: die 123 ist ein Blutzuckerwert, die 8 und die 2 sind Insulinmengen und die 2 sind gegessene Broteinheiten (BE). Die 8 und die 2 sind deshalb zwei Einträge, weil man zum Beispiel 8 Einheiten für die 2 BE und noch mal 2 Einheiten Insulin als Korrektur für die "zu hohen" 123 spritzen muss. In meiner Software werden die aber als 10 geführt. Diabetiker unter uns verzeihen mir bitte die etwas unrealistischen Werte... :zwinker: |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Dann stimmt doch sum() da 8+2 = 10
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Nun gut, es interesiert also lediglich das Datum und die Uhrzeit und alles andere ist egal ? Das können auch Zufallswerte sein oder was ? :shock: Wie bereits gesagt : SP, die internern ermittelt, ob ein Datensatz mit gleichem Datum/Uhrzeit vorhanden ist und dann UPDATE. Falls nicht vorhanden : INSERT.
wg. roter Kasten : Oh je, ich sage besser nichts mehr. 8) :mrgreen: Deshalb ohne Gewähr : in dem nachgelieferten Beispiel ist die 123 der erste Wert. Um nur den abzuspeichern, entfiele in der SP lediglich der UPDATE-Zweig. VORHANDEN = -1; SELECT ID FROM BLABLA WHERE (DATUM = :DATUM AND UHRZEIT = :UHRZEIT) INTO :VORHANDEN; IF VORHANDEN < 0 THEN INSERT ... |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
SQL-Code:
Dann habe ich danach folgendes in der DataImport:
SELECT Datum, Zeit, Sum(BZ), Sum(INSULIN), Sum(BE), INSULUIN_NAME, STATUS FROM DataImport GROUP BY Datum, Zeit;
Zitat:
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
Werte ebenfalls eingegeben werden können. Zitat:
Zitat:
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Hallo Holger,
bei mir funktioniert das ausgezeichnet:
Delphi-Quellcode:
Freundliche Grüße
begin
with Query do begin SQL.Text := 'select datum, zeit, max(bz) as bz, sum(ie) as ie, sum(be) as be ' + 'into tageswerte from messwerte group by datum, zeit'; ExecSQL; SQL.Text := 'select * from tageswerte order by datum, zeit'; Open; // ... Close; end; |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
@Achim du hast aber ursprünglich was anderes geschrieben:
Zitat:
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Hallo Markus,
zu dem Zeitpunkt war die Anforderung ein simples folding - da war es egal, ob man Max(), Min() oder Sum() verwendet. Später hat Holger erklärt, dass er auch noch akkumulieren muss, weshalb ich die für mich erkenntlichen Werte auf Sum() umgestellt habe. Freundliche Grüße |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Nein ich meinte der Unterschied zwischen Feldliste und Gruppierungsliste
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Meinst du die Felder Wert1, Wert2, Wert3? Ich hatte mir inzwischen eine Testdatenbank erzeugt, wobei ich die Felder eigenwillig benannt habe, aber eigentlich wollte ich mit Beitrag #14 nur einen Machbarkeitsbeweis angesichts der Negativmeldung in Beitrag #4 antreten.
Edit: Ach Scheibenkleister - jetzt weiß ich was du meinst. Muss ich blind gewesen sein. So sorry. |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
hmmm :gruebel: irgendwie geht das mit den SQL Befehlen in der Absolute Datebase noch nicht. Wenn ich mit dem Group Befehl Datum und Zeit einbinde, meckert die Datenbank mit folgenden Hinweis: Zitat:
aber das SQL Ergebnis enthält genau die gleiche Anzahl Datensätze wie die ursprüngliche Importtabelle. :? |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Die Felder müßen entweder in der Gruppierung sein oder als Aggregat (Min, Max, AVG, Sum, ...)
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
SUM, AVG etc bringt da ja nichts. :wink: Einfach in die Gruppe? *Edit*: Wenn ich das Feld mit dem Insulinnamen in den GROUP Befehl einfügen, werden es wieder zwei Datensätze mehr, die dann keine sinnvollen Daten enthalten. |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Versuch es mal MIN oder gibt es ABS ein First o.ä Aggregat? sonst könntest du die Spalte in einem 2. Schritt dazujoinen
|
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
anderen Lösungsweg. |
Re: Wie mehrere Datensätze m.gleichen Feldwerten zusammenfüh
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz