WinFuture-Forum.de: [mysql] Datum Eines Datensatzes Mit Jahresübergreifender Zeitspanne .. - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[mysql] Datum Eines Datensatzes Mit Jahresübergreifender Zeitspanne .. ... abfragen


#1 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 26. Mai 2010 - 14:46

Hallo,

ich habe ein kleines MySQL Problem. Ich kenne mich leider mit den Datum/Zeitfunktionen nicht so super aus.

Betroffen sind zwei Tabellen:

Erste Tabelle beinhaltet Datensätze die unter anderem ein Datum (DATETIME YYYY-MM-DD) besitzen.

Die zweite Tabelle ist eine Tabelle die sozusagen ein neue Jahresspanne festlegt.
Die Jahre werden wie normal mit 2010,2011 usw bezeichnet. Der unterschied ist nur dass jedes Jahr am 1.2.diesen Jahres anfangen und im nächsten Jahr am 31.1 enden.

Hier ein Beispiel für das Jahr 2010: 01.02.2010 bis zum 31.1.2011

Eingefügtes Bild
Struktur:
Eingefügtes Bild



Nun habe ich einen Datensatz mit dem Datum 20.01.2012.

Nun bräuchte ich eine Funktion die abhängig von dem aktuellen Datum und der Daten in der ersten tabelle mir sagt um welches Jahr es sich handelt.

Es müsste mir also sagen dass der Datensatz mit dem Datum 20.01.2012 in das Jahr 2011 gehört.

Würde mich über Anregungen bzw Hilfe freuen!

Gruß,
Toasterfraktion

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 27. Mai 2010 - 18:45

0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 27. Mai 2010 - 07:44

Wo ist die zweite Tabelle? Du beschreibst immer nur eine. Ich weiß nicht, wie beide Tabellen verknüpft sind.

Ich gehe mal davon aus, dass dir EXTRACT nicht bekannt ist. Dadurch wird die Spalte jj_name nämlich überflüssig. Das Jahr hast du bereits in jj_von gespeichert und dieses kannst du einfach mittels EXTRACT auslesen. Z.B.
SELECT jj_id FROM Tabelle WHERE EXTRACT(YEAR FROM jj_von) = '2010'


Zitat

Es müsste mir also sagen dass der Datensatz mit dem Datum 20.01.2012 in das Jahr 2011 gehört.

Wie gesagt ist mir die Struktur der zweiten Tabelle nicht bekannt. Wo steht genau das Datum "20.01.2012" und wie ist das mit der ersten Tabelle verknüpft?
0

#3 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 27. Mai 2010 - 17:30

Ich glaube ich habe mich nicht richtig ausgedrückt.

Also folgendes.

Die Erste tabelle:

Es wird je Datensatz verschiedenste Daten gesammelt. Unter anderem eine ID und ein Datum im Datumksformat von MySQL.

ID Datum
1 2010-02-01
2 2010-03-05
3 2011-06-20

Dann gibt es eine zweite Tabelle, wie oben beschrieben.

Diese Tabellen sind nicht wirklich miteinander verknüpft. Die zweiten Tabelle(Jahretabelle) soll nur dazu dienen das richtige "Jahr" für den jeweiligen Datensatz aus der ersten Tabelle herauszufinden.

Da sieht der SQL Befehl dann wohl anders aus, denke ich!

Mfg
0

#4 Mitglied ist offline   prunkster 

  • Gruppe: aktive Mitglieder
  • Beiträge: 281
  • Beigetreten: 22. Mai 08
  • Reputation: 5
  • Geschlecht:Männlich

geschrieben 27. Mai 2010 - 18:15

suchst du vielleicht das hier?

SELECT Tabelle1.*, Tabelle2.* FROM Tabelle1, Tabelle2 WHERE Tabelle1.Datum >= Tabelle2.jj_von AND Tabelle1.Datum <= Tabelle2.jj_bis;


wahrscheinlich nicht besonders schön und effektiv, sollte aber gehen...

//edit: nur noch ein kleiner hinweis: im text steht, du nutzt mysql, der threadtitel suggeriert aber mssql ;-)

Dieser Beitrag wurde von prunkster bearbeitet: 27. Mai 2010 - 18:21

Eingefügtes Bild <--- Workstation@Home

My Blog: hier
0

#5 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 27. Mai 2010 - 19:28

Ne, so funktioniert es leider nicht!

Ich habe es mir so vorgestellt, dass ich in der SELECT anweisung eine neue Spalte hinzufüge wo das Jahr eingetragen wird.

Also die Tabellenstruktur wie gehabt:
ID Datum
1 2010-02-01
2 2010-03-05
3 2011-06-20

Und das Resultat des Querys dann beispielweise so: 1 2010-02-01 YYYY

YYYY soll dann das Jahr enthalten! Das ist doch irgendwie möglich eine neue, dynamische Spalte für jeden Datensatz zu erstellen?
0

#6 Mitglied ist offline   sn00b 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.242
  • Beigetreten: 07. November 05
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 27. Mai 2010 - 19:55

Das von prunkster vorgeschlagene sollte doch genau passen. Du packst das ganze nur in eine Abfrage in der die Daten der tabelle1 übernommen werden und eben deine gewünschte Spalte mit dem sql-code von prunkster. Wenn die Datumsspanne immer die selbe ist bräuchte man ja nicht mal eine zweite Tabelle da man einfach nur eine Ober- und Untergerenze checken müsste und das richtige Jahr dann hätte.
Nach dem Motto:
Wenn Monat Gleich Januar dann Jahr-1 sonst Jahr.

EDIT:
In deinem Beispiel bräuchtest du doch auch nur eine Kopie vom Datum in der du 31 Tage abziehst und dann nur das Jahr ausgeben lässt. Oder irre ich mich da jetzt?

Dieser Beitrag wurde von sn00b bearbeitet: 27. Mai 2010 - 20:15

0

#7 Mitglied ist offline   prunkster 

  • Gruppe: aktive Mitglieder
  • Beiträge: 281
  • Beigetreten: 22. Mai 08
  • Reputation: 5
  • Geschlecht:Männlich

geschrieben 27. Mai 2010 - 22:38

@tosterfraktion: ich seh in dem query jetzt auch nicht das große problem, wenn ich mir deine gewünschte ausgabe ansehe, hätte man das mit einer kleinen anpassung auch selbst zu ende bekommen können:

SELECT Tabelle1.*, Tabelle2.jj_name FROM Tabelle1, Tabelle2 WHERE Tabelle1.Datum >= Tabelle2.jj_von AND Tabelle1.Datum <= Tabelle2.jj_bis;


@sn00b: die überprüfung auf januar und bei zutreffen ein jahr abzuziehen ist pfiffig, guter gedankenzug ;( immer 31 tage abzuziehen wird dagegen hier glaube ich nicht hinhauen: der februar mit seinen 28 bzw. 29 tagen führt dazu, dass z.b. beim datum 01.03.xxxx bis 02. bzw. 03.03.xxxx immer das vorjahr errechnet wird (wenn ich nicht gerade einen totalen knoten im hirn habe ;) )
Eingefügtes Bild <--- Workstation@Home

My Blog: hier
0

#8 Mitglied ist offline   sn00b 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.242
  • Beigetreten: 07. November 05
  • Reputation: 0
  • Geschlecht:Männlich

  geschrieben 28. Mai 2010 - 05:38

Beitrag anzeigenZitat (prunkster: 27.05.2010, 23:38)

@sn00b: ...immer 31 tage abzuziehen wird dagegen hier glaube ich nicht hinhauen: der februar mit seinen 28 bzw. 29 tagen führt dazu, dass z.b. beim datum 01.03.xxxx bis 02. bzw. 03.03.xxxx immer das vorjahr errechnet wird (wenn ich nicht gerade einen totalen knoten im hirn habe ;( )

Ich bin mir ziemlich sicher das man auch eine Abfrage schalten könnte ob das Datum in einem Schaltjahr liegt, dann einfach einen Tag mehr abziehen sofern das Datum nach dem 28. Februar liegt. Was aber in dem Beispiel sogar überflüssig wäre, da ja der Umbruch vor dem 28. Februar liegt.

Dieser Beitrag wurde von sn00b bearbeitet: 28. Mai 2010 - 05:56

0

#9 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 28. Mai 2010 - 07:55

So?
SELECT t2.id, t2.Datum, EXTRACT(YEAR FROM t1.jj_von) FROM tab1 t1
JOIN tab2 t2 ON t2.Datum BETWEEN t1.jj_von AND t1.jj_bis
WHERE t2.id = 3

0

#10 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 31. Mai 2010 - 17:02

Ja das müsste laufen, danke! :-)
0

#11 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 03. Juni 2010 - 15:14

Heb mir nun eine Funktion gebastelt, so dürfte es doch kein Problem sein oder?

function get_jj($datum){
	
	$ex = explode(".",$datum);
	
	$tag   = (int) $ex[0];
	$monat = (int) $ex[1];
	$jahr  = (int) $ex[2];
	
	if($monat  == 1){
		return $jahr-1;
	}else {
		return $jahr;
	}	
	
}


Kann man diese Wenn Abfrage auch irgendwie in SQL bewerkstelligen?
0

#12 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 04. Juni 2010 - 07:04

In MySQL gibt es If-Verzweigungen. Allerdings gehören diese nicht zum SQL-Standard:
http://dev.mysql.com/doc/refman/5.1/de/con...-functions.html
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0