pro Monat einen Eintrag generieren bei vorliegendem Zeitraum

Moderator: ModerationP

pro Monat einen Eintrag generieren bei vorliegendem Zeitraum

Beitragvon paintitblack3k » 11. Okt 2018, 22:50

Hi,

ich habe Einträge in einer Tabelle mit einem Beginn und Ende-Datum und möchte diese pro Monatgruppieren.

Beispiel:
der Datensatz ist von 01.09.2018 bis 31.03.2019 und der zweite von 01.04.2018 bis 31.12.2019 gültig und ich möchte für 2019 insgesamt 12 Einträge (einen pro Monat) als Ergebnis. Für den jeweilgen Monat soll der Monatsletzte (z.B. 31.05.2019) als Abfragezeitpunkt verwendet werden.

Kann man das ohne VBA direkt im SQL lösen?

Vielen Dank für jegliche Hilfe

pib
paintitblack3k
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 36
Registriert: 01. Aug 2018, 16:06

Re: pro Monat einen Eintrag generieren bei vorliegendem Zeit

Beitragvon Nouba » 12. Okt 2018, 07:25

Das geht mit einer zusätzlichen Pivot-Tabelle. Siehe <dbfiddle> (mit Kommentar für Access-Umsetzung).
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17279
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin

Re: pro Monat einen Eintrag generieren bei vorliegendem Zeit

Beitragvon paintitblack3k » 12. Okt 2018, 10:36

Cool das hilft schon etwas weiter.

Ich habe mal eine Hilfstabelle angelegt:
Code: Alles auswählen
create table Kalender (
  ID integer primary key,
  Monat date);


Code: Alles auswählen
insert into Kalender (ID, Monat)
values (1, '2019-01-31'),
(2, '2019-02-28'),
(3, '2019-03-31'),
(4, '2019-04-29'),
(5, '2019-05-30'),
(6, '2019-06-30'),
(7, '2019-07-31'),
(8, '2019-08-31'),
(9, '2019-09-30'),
(10, '2019-10-31'),
(11, '2019-11-30'),
(12, '2019-12-31');


Mit folgender Abfrage bekomme ich nun 12 Monate:
Code: Alles auswählen
SELECT DateSerial(Year(Monat), Month(Monat) + 1, 0) as dt FROM Kalender


Wie könnte man dies nun mit folgender Abfrage kombinieren, sodass für die 12 Monate der Wert für ID 123 ermittelt wird?
Code: Alles auswählen
SELECT Wert FROM Daten WHERE ID=123


Vielen Dank für jeglichen Tipp

pib
paintitblack3k
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 36
Registriert: 01. Aug 2018, 16:06

Re: pro Monat einen Eintrag generieren bei vorliegendem Zeit

Beitragvon Nouba » 12. Okt 2018, 10:58

@pib,

ich verstehe den Sinn der Kalendertabelle mit einem Datum als Text (in SQLite3 geht das nicht anders, wenn sich das Auge daran erfreuen soll), das zudem noch den irreführenden Namen Monat führt, nicht. Werden nur Daten (ohne Zeitanteil) verwendet, sollte ein einfaches Datumsfeld als Primärschlüssel genügen, über das man in Abfragen verknüpfen kann. Die DateSerial()-Funktion sollte nur dann verwendet werden, wenn ein Datumswert errechnet werden muss.

Zur Abfrage:
Code: Alles auswählen
SELECT CLng(123) AS ID,
       Datumsfeldname
FROM   Kalendertabelle;
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17279
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin

Re: pro Monat einen Eintrag generieren bei vorliegendem Zeit

Beitragvon paintitblack3k » 12. Okt 2018, 14:47

Hallo,

die Kalendertabelle sollte eigentlich nur als Hilfstabelle dienen, da ich die Abfrage pro Monatsletzten (z.B. 31.03.2019) ermitteln möchte.

In der eigentlichen Datentabelle ist eine Spalte Beginn und ein Ende-Datum und kann ich ohne die Hilfstabelle die Daten irgendwie gruppieren (Stichtag: Monatsletzter)?

Ich hatte ungefähr an folgendes gedacht:
Code: Alles auswählen
SELECT Kalender.Monat, Wert
FROM Daten, Kalender
WHERE ID=123 AND Daten.Beginn<=Kalender.[Monat] AND Daten.Ende>=Kalender.[Monat];


Würde das ohne Einschränkung auf die ID für alle ID auch funktionieren? Oder müsste man dies mit GROUP BY lösen?

Viele Grüße

pib
paintitblack3k
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 36
Registriert: 01. Aug 2018, 16:06

Re: pro Monat einen Eintrag generieren bei vorliegendem Zeit

Beitragvon Nouba » 12. Okt 2018, 15:16

Von der Logik her geht das. Du erzeugst ein kartesisches Produkt. Jeder Datensatz aus der ersten Tabelle wird dabei so oft dargestellt, wie es Datensätze in der zweiten Tabelle gibt, wobei die Bedingung für Einschränkungen der Datenmenge sorgen kann.
mit freundlichen Grüssen Nouba

Wenn beim Lesen eines Beitrags der Eindruck entsteht, dass sich der Fragesteller wenig Mühe gegeben hat, so erhöht das nicht unbedingt die Motivation, eine Antwort zu verfassen.
Nouba
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 17279
Registriert: 13. Mär 2006, 12:55
Wohnort: Berlin

Re: pro Monat einen Eintrag generieren bei vorliegendem Zeit

Beitragvon paintitblack3k » 14. Okt 2018, 21:06

Vielen Dank für die Unterstützung. Die Lösung mit der Hilfstabelle ist sehr hilfreich und ich werde damit erst mal fortfahren :-)
paintitblack3k
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 36
Registriert: 01. Aug 2018, 16:06


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: intersoft07552 und 6 Gäste