![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: SQLite3.pas
Hilfe bei SQL Abfrage
Hallo zusammen,
ich habe eine Tabelle mit vielen Events
Code:
Mit dem SQL Wrapper für SQLite kann ich Abfragen folgendermaßen durchführen:
Year | Month | Day | Event | Duration
2016 | 04 | 01 | blabla | 20 2016 | 04 | 01 | blabla | 3 2016 | 04 | 01 | blabla | 12 2016 | 04 | 03 | blabla | 8
Delphi-Quellcode:
Die Ergebnisse der Abfrage stehen in sltb, die ähnlich wie eine StringList behandelt werden kann:
var
slDBPath: string; sldb: TSQLiteDatabase; sltb: TSQLIteTable; begin slDBPath := ExtractFilepath(Application.ExeName) + 'MeineSQLiteDatenbank.db'; sldb := TSQLiteDatabase.Create(slDBPath); sltb := slDb.GetTable('SELECT * FROM events WHERE Year = "2016"');
Delphi-Quellcode:
Ich will die Duration monatsweise aufsummieren und überlege mir gerade wie ich die vorkommenden Monate am besten ermitteln kann. Meine SQL Kenntnisse sind relativ simpel und meine einzige Idee bisher ist:
var
iTotalDuration: integer; iEventDuration: integer; begin iTotalDuration := 0; for i := 0 to sltb.Count - 1 do begin if TryStrToInt(sltb.FieldAsString(sltb.FieldIndex['Duration']), iEventDuration) then begin iTotalDuration := iTotalDuration + iEventDuration; end; end; (1) durch eine SQL Abfrage alle Jahre ausgeben lassen (2) doppelte Jahreseinträge entfernen (3) für jedes Jahr Monatsabfragen zu erstellen
Delphi-Quellcode:
Mir kommt das zu kompliziert vor. Gibt es eine SQL Abfrage, die ihr kennt, die mir das Leben leichter macht? z.B. eine die mir gleich nur alle vorkommenden Jahre zurückgibt.
for i := iYearStart to iYearEnd do
begin // Januar sltb := slDb.GetTable('SELECT * FROM events WHERE Month = "1"'); if sltb.count > 0 then begin // aufsummieren end; // Februar sltb := slDb.GetTable('SELECT * FROM events WHERE Month = "2"'); if sltb.count > 0 then begin // aufsummieren end; // März sltb := slDb.GetTable('SELECT * FROM events WHERE Month = "3"'); if sltb.count > 0 then begin // aufsummieren end; // April sltb := slDb.GetTable('SELECT * FROM events WHERE Month = "4"'); if sltb.count > 0 then begin // aufsummieren end; // usw. end; |
AW: Hilfe bei SQL Abfrage
Code:
select distinct year FROM events
|
AW: Hilfe bei SQL Abfrage
oder
Code:
select year, sum(duration) as duration_sum FROM events
group by year |
AW: Hilfe bei SQL Abfrage
Auf Monatsebene:
SQL-Code:
Auf Tagesebene:
Select Year, Month, Sum(Duration) as Duration_Sum from events
group by year, Month
SQL-Code:
Prinzipiell sind auch beliebige andere Kombinationen möglich:
Select Year, Month, Day, Sum(Duration) as Duration_Sum from events
group by Year, Month, Day
SQL-Code:
So ließe sich dann auch die Summe der Laufzeit für die einzelnen Events ermitteln:
Select <gewünschte Werte>, Sum(<zu summierender Wert>) as <sinnvolle Bezeichnung> from <tabellenname>
group by <gewünschte Werte> (identisch mit der Aufzählung, der nichtsummierten Werte im Select)
SQL-Code:
Select Event, Sum(Duration) as Duration_Sum from events
group by Event |
AW: Hilfe bei SQL Abfrage
Funktioniert wunderbar :thumb: Danke an euch beide!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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 by Thomas Breitkreuz