mist
Goto Top

SQL-SELECT-Frage

Hallo,
ich versuche mich ab und an mit SQL. Und nun stehe ich vor einem kl. Problem, welches ich mit Google nicht lösen kann.

Beispiel:

SELECT SUM(betrag) AS "Betrag"  
FROM rechnungen
WHERE year(betrag) = year(curdate())-1

Das zeigt mir den Betrag aller Rechnungen vom letzten Jahr auf. Mit -2, den von vor 2 Jahren.
Jetzt möchte ich gerne, dass beide Beträge, -1 und -2, nebeneinander stehen.

Das was ich im WWW über "sql 2 selects verbinden" gefunden habe, verstehe ich irgendwie nicht.

Hätte da jemand 1,2 Tipps?

VG
Michael

Content-Key: 467982

Url: https://administrator.de/contentid/467982

Printed on: April 18, 2024 at 19:04 o'clock

Member: emeriks
emeriks Jul 01, 2019 at 12:31:27 (UTC)
Goto Top
Hi,
hm, so?
Select 
  (SELECT SUM(betrag)
  FROM rechnungen
  WHERE year(betrag) = year(curdate())-1) AS [Betrag-1], 
  (SELECT SUM(betrag)
   FROM rechnungen
   WHERE year(betrag) = year(curdate())-2) AS [Betrag-2]

E.
Member: TheJoker2305
Solution TheJoker2305 Jul 01, 2019 updated at 13:27:59 (UTC)
Goto Top
Hallo,

welche Daten sind im Feld betrag gespeichert? Eine Zahl oder ein Datum?

Wenn das Datum und der Betrag in getrennten Feldern gespeichert sind, dann ist es so kürzer und leichter erweiterbar.
Ist zwar von T-SQL adaptiert, aber sollte auch in anderen SQL-Dialekten laufen.

SELECT 
	sum(case when year(datum) = year(curdat())-2 then betrag else 0 end) as vorvorjahr,
	sum(case when year(datum) = year(curdat())-1 then betrag else 0 end) as vorjahr,
	sum(case when year(datum) = year(curdat()) then betrag else 0 end) as aktjahr
FROM rechnungen
 

Greetz
thejoker2305
Member: MiSt
MiSt Jul 01, 2019 at 12:55:02 (UTC)
Goto Top
Zitat von @TheJoker2305:

Hallo,

welche Daten sind im Feld betrag gespeichert? Eine Zahl oder ein Datum?
Eine Zahl

Wenn das Datum und der Betrag in getrennten Feldern gespeichert sind, dann ist es so kürzer und leichter erweiterbar.
Ist zwar von T-SQL adaptiert, aber sollte auch in anderen SQL-Dialekten laufen.

> SELECT 
> 	sum(case when year(datum) = year(curdat())-1 then betrag else 0 end) as vorjahr,
> 	sum(case when year(datum) = year(curdat()) then betrag else 0 end) as aktjahr
> FROM rechnungen
>  
> 

Greetz
thejoker2305
Member: TheJoker2305
TheJoker2305 Jul 01, 2019 at 13:26:36 (UTC)
Goto Top
Hallo,

funktioniert die Abfrage wie gewünscht?

Greetz
thejoker2305
Member: MiSt
MiSt Jul 02, 2019 updated at 04:13:13 (UTC)
Goto Top
Guten Morgen,

Zitat von @TheJoker2305:

Hallo,

funktioniert die Abfrage wie gewünscht?

Greetz
thejoker2305
Sorry, mir ist gestern noch was dazwischen gekommen.
Vielen vielen Dank, das SELECT läuft echt prima.

Ich habe das auch mal auf den Tag vom Vorjahr runter gebrochen.
...
WHEN YEAR(datum) = YEAR(curdate()) - 1
   AND MONTH(datum) = MONTH(curdate())
   AND DAY(datum) = DAY(curdate())
...
Kann man das so machen oder gibt es da einen eleganteren Weg?

VG
Member: TheJoker2305
TheJoker2305 Jul 03, 2019 at 09:51:39 (UTC)
Goto Top
Guten Morgen,

ja, gibt es. DATEADD

Dies ergibt den heutigen Tag vorm Vorjahr (hier T-SQL).
 select dateadd(year, -1,GETDATE())



Hier mit mysql:
DATE_ADD(CURRENT_DATE, INTERVAL -1 YEAR)

Greetz
thejoker2305
Member: MiSt
MiSt Jul 03, 2019 at 18:03:35 (UTC)
Goto Top
Danke. Werde ich mir mal anschauen. Wir nutzen eine Sybase-DB.