Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[SQL] Selectie op meerdere tabellen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een breinkraker... ik heb een query om vanuit een database issues te kunnen bekijken. Daarvan wil ik status, etc hebben. De query ziet er als volgt uit:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select bg_id [Issue ID], 
          st_name [Status],
          ct_name [Categorie],
          pr_name [Prioriteit], 
          convert(varchar, bg_reported_date, 5) [Issue Aangemaakt], 
          convert(varchar, bg_last_updated_date, 5) [Issue Gesloten],
          convert(varchar, bc_date, 5) [Issue opgepakt],
          datediff("day", "bg_reported_date", "bc_date") [Reactietijd in dagen],
          datediff("day", "bg_reported_date", "bg_last_updated_date") [Doorlooptijd in dagen]
from bugs
          left outer join bug_comments on bg_id = bc_bug and bc_type = 'update' and bc_comment  
                                                                     like 'changed%'
          left outer join projects on pj_id = bg_project
          left outer join statuses on st_id = bg_status 
          left outer join categories on ct_id = bg_category
          left outer join priorities on pr_id = bg_priority 
where bg_project = 68 
and month(bg_reported_date) = 8
and (st_id = 5 or st_id = 3)
order by bg_id, bc_date


Alles ging goed, totdat ik de bc_date op ging vragen. In de tabel bug_comments kunnen van 1 issue meerdere records voorkomen, elke keer als er een status is gewijzigd of als er commentaar is toegevoegd komt er in deze tabel een extra record met de datum van de wijziging en wat er gewijzigd is.
Nou wil ik de eerste wijziging per issue terugkrijgen, maar met de query zoals hierboven krijg ik het volgende resultaat (voorbeeld):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Issue  Status  Categ  Prio   Aangemaakt  Gesloten   Opgepakt   Reactietijd   Doorlooptijd
=================================================================
3861   closed  Fout    low   02-08-07        09-08-07    02-08-07     0                 7 
3861   closed  Fout    low   02-08-07        09-08-07    02-08-07     0                 7 
3861   closed  Fout    low   02-08-07        09-08-07    02-08-07     0                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3861   closed  Fout    low   02-08-07        09-08-07    09-08-07     7                 7 
3868   closed                    03-08-07        10-09-07    03-08-07     0                38 
3868   closed                    03-08-07        10-09-07    06-08-07     3                38 
3868   closed                    03-08-07        10-09-07    06-08-07     3                38 
3868   closed                    03-08-07        10-09-07    07-08-07     4                38 
3868   closed                    03-08-07        10-09-07    07-08-07     4                38 
3868   closed                    03-08-07        10-09-07    10-09-07    38               38


Ik dacht slim te zijn door de DISTINCT te gebruiken, maar dan klopt het nog steeds niet, aangezien er meerdere data "Opgepakt" zijn... dus dan voegt hij alleen de records met dezelfde datum bij elkaar. Terwijl ik dus van elke issue maar 1 record wil met de eerste datum waarop de issue is opgepakt.
Kan iemand mij helpen?

[ Voor 0% gewijzigd door een moderator op 21-09-2007 23:25 . Reden: highlighting maakt het wat leesbaarder :) ]


  • the_dgc
  • Registratie: Augustus 2001
  • Laatst online: 18-11-2022

the_dgc

raar he..... leven!!

een optie is om aan het einde toe te voegen

group by issue (en dan misschien nog de rest van de velden. ligt aan de database of dat noodzakelijk is.)

het is niet de meest nette oplossing, maar het werkt waarschijnlijk wel

een wereld zonder vrede.. raar?? kijk om je heen dan merkje dat het heel normaal is...
neeeh ik ben niet druk, jij bent gewoon te rustig !!
dual xeon 2.4, 1024 intern, gf3 ti200, maxtor 60 gb 7200 rpm en nog wat opvulling


Verwijderd

kijk eens naar 'group by' daarna kun je max(date) gebruiken

  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Er komt iets bij me bovendrijven met 'FIRST' en/of 'LAST'. Misschien kan je daar wat mee...
Voor je juiste syntax ff googelen of je boek erbij halen.

* Min en max dus :P *

[ Voor 11% gewijzigd door PaulZ op 20-09-2007 14:02 ]

Vlinders moet je volgen, niet vangen...


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Daar heb je een group by voor nodig. In combinatie met min en max functie.

http://www.w3schools.com/sql/sql_groupby.asp

Programmer - an organism that turns coffee into software.


  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 21-11 18:08
Denk dat in dit geval de GROUP BY / MAX(date) de beste oplossing is. Zijn wel andere oplossingen voor, maar daar wordt je waarschijnlijk niet vrolijker van...

De zou ook een GROUP BY / MAX(id) kunnen gebruiken. Zorg je ervoor dat je alle incidenten selecteert, en daarna een MAX(id) gebruikt. Krijg je alleen het laatst toegevoegde record terug.

Verwijderd

Topicstarter
Acid_Burn wat bedoel je precies met alle incidenten selecteren?
Ik ben ondertussen aan het stoeien met de Group By en de MAX, wil nog niet echt vlotten :(

Verwijderd

Topicstarter
Als ik de GROUP BY gebruik op "id" dan krijg ik de volgende melding:
Column 'statuses.st_name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

En als ik GROUP BY op "date" doe dan krijg ik deze:
Column 'bugs.bg_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

ik ben het ff kwijt zeg maar.....

  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 21-11 18:08
Verwijderd schreef op donderdag 20 september 2007 @ 14:28:
Acid_Burn wat bedoel je precies met alle incidenten selecteren?
Ik ben ondertussen aan het stoeien met de Group By en de MAX, wil nog niet echt vlotten :(
Je wilt toch maar 1 issue terugkrijgen? En of dat dan de MIN of MAX is maakt eigenlijk niks uit....


code:
1
SELECT ID, DATE FROM TABLE WHERE DATE = MAX(DATE) GROUP BY DATE


of

code:
1
SELECT ID, DATE FROM TABLE GROUP BY DATE HAVING DATE = MAX(DATE)


Zou je even moeten testen. Maar volgens mij zou het zo moeten lukken ;)


[Edit]:
Verwijderd schreef op donderdag 20 september 2007 @ 14:32:
Als ik de GROUP BY gebruik op "id" dan krijg ik de volgende melding:
Column 'statuses.st_name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

En als ik GROUP BY op "date" doe dan krijg ik deze:
Column 'bugs.bg_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

ik ben het ff kwijt zeg maar.....
Als je dat krijg wil dat dus zeggen dat de query niet gaat werken, tenzij je de aangegeven kolom ook in de GROUP BY zet. Dus je krijgt:

code:
1
GROUP BY ID, ST_NAME


Of

code:
1
GROUP BY ID, DATE

[ Voor 39% gewijzigd door Acid__Burn op 20-09-2007 14:37 ]


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 28-11 11:15

sopsop

[v] [;,,;] [v]

Zie hier: http://www.w3schools.com/sql/sql_groupby.asp

Je kunt alleen velden in je select opnemen die of van een aggregate functie voorzien zijn of in de group by clausule staan. Zeg maar precies wat er in de foutmelding staat.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Pak onze mooie FAQ er eens bij met het stukje over group by want daar staat het mooi in uitgelegd.

Je hebt twee oplossingen
1) Alle zaken die je selecteert opnemen in een aggragated functie (zoals min, max, avg etc) OF ook opnemen in je GROUP BY
2) MySQL gebruiken want die staat dit toe :P

Je wilt overigens altijd oplossing 1, zelfs als je 2 ook gebruikt ;)

offtopic:
edit: traaag...

[ Voor 4% gewijzigd door Creepy op 20-09-2007 14:38 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 21-11 18:08
Creepy schreef op donderdag 20 september 2007 @ 14:37:
2) MySQL gebruiken want die staat dit toe :P
Is geen oplossing hè. Is gewoon ordinair reclame maken. Heb je soms aandelen MySQL? :P

Verwijderd

Topicstarter
Thnx voor de help! Het is gelukt! _/-\o_

  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 21-11 18:08
En hoe heb je het opgelost dan? Ben ik wel benieuwd naar :P

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Acid__Burn schreef op donderdag 20 september 2007 @ 14:38:
[...]
Is geen oplossing hè. Is gewoon ordinair reclame maken. Heb je soms aandelen MySQL? :P
offtopic:
9 vd 10 keer als iemand over die ' feature' heeft is het niet als reclame bedoeld. ;) En ik weet redelijk zeker dat Creepy het ook meer een bug vind. :P

{signature}


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

offtopic:
Vandaar dat ik ook pleit om altijd oplossing 1 te gebruiken zelfs als je MySQL gebruikt. ;) En inderdaad, ik zelf vindt het geen feature maar een bug


En inderdaad: hoe heb je het nu opgelost? Ik neem aan door "mijn" oplossing 1?

[ Voor 17% gewijzigd door Creepy op 21-09-2007 17:24 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 21-11 18:08
Voutloos schreef op vrijdag 21 september 2007 @ 17:16:
[...]
offtopic:
9 vd 10 keer als iemand over die ' feature' heeft is het niet als reclame bedoeld. ;) En ik weet redelijk zeker dat Creepy het ook meer een bug vind. :P
I know... Just kiddin' ;)

Maar ben erg benieuwd naar de oplossing...
Pagina: 1