[SQL] Query automatiseren, SQL kennis gezocht....

Pagina: 1
Acties:
  • 105 views sinds 30-01-2008
  • Reageer

  • onne
  • Registratie: December 2000
  • Laatst online: 21:30
(Weet niet zeker of dit de beste plaats is om dit topic te plaatsen?!)

Hi, ben bezig met het automatiseren van een aantal query´s dit brengt met zich mee dat het updaten van data (wat voorheen met de hand ging) nu automatisch dient te gebeuren.

Dit is de (vereenvoudigde) situatie.
Ik heb een tabel met 3 kolommen. 1, gevuld met ID´s 2, gevuld met jaartal (2003,2004 enz) en 1 gevuld met de maand (1,2,3 enz.).
Het resultaat dat ik uit de query wil hebben is, de ID waar de laatste en opeennalaatste maand geselecteerd wordt. In een normale situatie zou dit zijn iets als year is max, en month is max and month is max-1. Een probleem is echter wanneer je op de overgang van jaren zit. In januari 2005 wil je dus, 2005-1 en 2004-12.

Er zijn twee oplossingen waar ik tevreden mee zou zijn.

1, voeg het jaartal jaarlijks handmatig toe. Dus verander de query een maal per jaar zodat je in de query alleen opneemt select ID where year is 2004 (dit dus 1 x per jaar ophogen) and month is max.

2, de mooiste mogelijkheid zou zijn als zowel het jaar als de maand geautomatiseerd wordt. Dus hij pakt de ID´s where year/month is max.

De kolommen kan ik niet wijzigen die staan vast (anders had ik de maand en het jaar in 1 kolom gezet zodat je deze problemen voorkomt).

Nou is het zo, ik heb slechts basis SQL kennis en dit gaat mij te ver. In de search heb ik geen zinvolle informatie kunnen vinden mede omdat ik niet echt een goede zoekopdracht heb kunnen formuleren.

Mijn vraag dus, zou iemand mij met het SQL-script kunnen helpen?
Voor oplossing 1 kom ik niet verder dan:

SELECT id, year, month
FROM dbase o.i.d
WHERE month= MAX (bestaat zoiets??) and month= MAX-1 (zo zou ik het dus willen hebben maar nogmaals mijn SQL kennis is zeer gering en ik weet dus niet of er zo´n soort mogelijkheid bestaat)

Voor de tweede oplossing heb ik echt geen idee.

Hoop dat iemand mij hiermee op weg kan helpen, alvast heel veel dank!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
3
select id, year, month
from dbase
order by year desc, month desc

en dan 2x fetchen.

Who is John Galt?


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Welk DBMS gebruik je?

in SQL Server zou dit wel moeten werken denk ik:
code:
1
2
3
SELECT *
FROM tabel 
WHERE DATEDIFF(m, cast(jaar as varchar(4)) +'/'+ cast(maand as varchar(2)) +'/01',getdate()) BETWEEN 1 AND 2


Waarschijnlijk is er ook wel een nettere oplossing, maar dit kwam als eerste te boven.

[ Voor 8% gewijzigd door P_de_B op 24-09-2004 11:14 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Glewellyn
  • Registratie: Januari 2001
  • Laatst online: 20-05 11:37

Glewellyn

is er ook weer.

code:
1
SELECT * FROM `test` order by jaar desc, maand desc limit 2


^ dat zou het moeten doen.....

*zucht*


  • onne
  • Registratie: December 2000
  • Laatst online: 21:30
P_de_B schreef op 24 september 2004 @ 11:13:
Welk DBMS gebruik je?

in SQL Server zou dit wel moeten werken denk ik:
code:
1
2
3
SELECT *
FROM tabel 
WHERE DATEDIFF(m, cast(jaar as varchar(4)) +'/'+ cast(maand as varchar(2)) +'/01',getdate()) BETWEEN 1 AND 2


Waarschijnlijk is er ook wel een nettere oplossing, maar dit kwam als eerste te boven.
bedankt! ga beide oplossingen testen, laat weten of het werkt!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik zie het denk ik te ingewikkeld, als je gewoon de laatste 2 maanden uit de tabel moet hebben kun je gewoon de query van Glewellyn gebruiken

Oops! Google Chrome could not find www.rijks%20museum.nl


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Glewellyn schreef op 24 september 2004 @ 11:16:
code:
1
SELECT * FROM `test` order by jaar desc, maand desc limit 2


^ dat zou het moeten doen.....
Afhankelijk van je DBMS kan het zo moeten:
SQL:
1
SELECT TOP 2 * FROM [test] ORDER BY jaar desc, maand DESC;
Jij gaf MySQL code, dit is de SQL Server variant :)

Professionele website nodig?


  • onne
  • Registratie: December 2000
  • Laatst online: 21:30
Ok, krijg verschillende foutmeldingen (ik maak gebruik van BrioQuery in combinatie met DB2)

Bij deze code:

SQL:
1
2
3
4
5
SELECT TOP 2 * 
FROM ... , ... 


 ORDER BY ... DESC, ...h DESC;


Krijg ik de foutmelding "an unexpected token "2" was found".


Bij deze code:

SQL:
1
2
3
SELECT *
FROM tabel 
WHERE DATEDIFF(m, cast(jaar as varchar(4)) +'/'+ cast(maand as varchar(2)) +'/01',getdate()) BETWEEN 1 AND 2


Error: "m" is not valid in the context where it is used.


Bij deze code:

SQL:
1
SELECT * FROM `test` order by jaar desc, maand desc limit 2


Error: "an unexpected token "limit" was found"

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

onne schreef op 24 september 2004 @ 11:33:
Ok, krijg verschillende foutmeldingen (ik maak gebruik van BrioQuery in combinatie met DB2)
*knip*
http://www.devx.com/getHe...lution/16573/1954?pf=true

Who is John Galt?


  • onne
  • Registratie: December 2000
  • Laatst online: 21:30
bedankt, een hoop relevante code, ga kijken of ik dr uitkom (nogmaals mijn sql kennis is gering)... :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Euj ik ken totaal BrioQuery en DB2 niet, maar met de gegevens tips en de online help of handleiding moet je hier toch uit kunnen komen. Zoek eens op dingen als 'limiting query output' e.d.

P&W is bedoeld om je de goede richting op te schuiven, niet om gratis pasklare bedrijfskritische oplossingen te genereren ;)

Professionele website nodig?


  • Glewellyn
  • Registratie: Januari 2001
  • Laatst online: 20-05 11:37

Glewellyn

is er ook weer.

code:
1
SELECT * FROM `test` order by jaar desc, maand desc FETCH FIRST 2 ROWS ONLY;


Ik kan het hier niet testen, maar volgens mij werkt dit met DB2...

*zucht*


  • onne
  • Registratie: December 2000
  • Laatst online: 21:30
curry684 schreef op 24 september 2004 @ 11:36:
Euj ik ken totaal BrioQuery en DB2 niet, maar met de gegevens tips en de online help of handleiding moet je hier toch uit kunnen komen. Zoek eens op dingen als 'limiting query output' e.d.

P&W is bedoeld om je de goede richting op te schuiven, niet om gratis pasklare bedrijfskritische oplossingen te genereren ;)
tuurlijk begrijp ik, met de bovenstaande info kom ik er vast uit... ik blijf proberen:) iedereen bedankt iig!
Pagina: 1