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

[SQL] Gecombineerde gegevens weergeven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben uren bezig geweest met het volgende probleem:

Ik heb een tabel met daarin o.a. 3 velden (een uid en twee datetime velden):
id
meeting_planned_date
meeting_date

In een bestaand systeem worden afspraken gepland (meeting_planned_date wordt gevuld) en als de meeting ook heeft plaats gevonden wordt meeting_date ook gevuld.

Nu wil ik een overzicht mbv SQL uit de database halen, waarin de geplande en plaatsgevonden afspraken van de vorige, huidige en volgende week staan:
code:
1
2
3
4
5
Weeknr | Ingepland | Plaatsgevonden
-----------------------------------
 40    |      706  |      600
 41    |      436  |       27
 42    |      218  |        3

Uit deze tabel blijkt dus o.a. dat er volgende week 3 gesprekken al hebben plaatsgevonden. Het systeem maakt dit helaas mogelijk, maar het moet wel naar voren komen in het overzicht.

Ik zou dit makkelijk kunnen doen met 2 queries, maar het moet echt in 1 query gebeuren. Eigenlijk wordt er een Oracle database gebruikt, maar als iemand het in MySQL of MS SQL kan laten werken, ben ik ook al een heel eind geholpen.

Waar ik mee begonnen ben, was zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
DATEPART(week, `ingepland`),
(
   SELECT COUNT(`meeting_planned_date`) 
   FROM `planning` 
   WHERE .... code die de juiste 3 rijen ophaalt
) as Ingepland,
(
   SELECT COUNT(`meeting_date`) 
   FROM `planning` 
   WHERE .... code die de juiste 3 rijen ophaalt
) as Plaatsgevonden
FROM `planning` 
WHERE .... code die de juiste 3 weken ophaalt
GROUP BY DATEPART(week, `ingepland`)


Nu doen alle 3 de queries apart het heel goed, maar (ik denk) door de GROUP BY werkt het geheel niet meer.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
zou je dit misschien met een join kunnen oplossen? dus de tabel joinen met zichzelf?

zoiets:
SQL:
1
2
3
4
select weeknr, count(A.id), count(B.id)
from tabel A
inner join tabel B
on datepart(week, A.meeting_planned_date) = datepart(week, B.meeting_date)


tis maar een gooi in de richting van een eventuele oplossing... heb nu geen tijd om te checken of dit uberhaupt wel een goede oplossing is... maar misschien kun je er wat mee..

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Groupeer op week, count(*) als ingepland, en count(meeting_date) als Plaatsgevonden werkt prima als meeting_date null is indien nog niet plaatsgevonden.

En het kan op nog wel 101 manieren. Nofi en misschien wat voorbarig hier, maar als je alleen in subqueries kan denken en daarbij gruwelijk in de knoop komt, moet je niet proberen de subqueries te verbeteren, maar je kennis van de overige sql syntax (joins, aggregate functions, having en niet te vergeten joins, joins en joins :P ) verbeteren/ophalen. ;)

[ Voor 6% gewijzigd door Voutloos op 09-10-2007 20:41 ]

{signature}