-
Notifications
You must be signed in to change notification settings - Fork 7
Important Queries
Pieter Kokx edited this page Jan 26, 2015
·
1 revision
Deze pagina is een verzamelpagina voor handige queries voor de secretaris.
-- Deze query haalt alle actieve leden in een bepaalde periode op.
-- Ik join alle installaties van alle leden, waardoor leden die nooit
-- actief waren meteen afvallen.
-- Hierna neem ik alle installaties mee die in de periode gemaakt zijn.
-- Ook neem ik alle installaties die niet gedechargeerd of vernietigd
-- zijn voor het begin van het de periode, mee.
-- Deze query is erg intimiderend en ingewikkeld. Dit is nodig om alle edge-cases af te vangen.
-- Dit is vooral belangrijk als besluiten met installaties en decharges vernietigd zijn.
-- Oftewel, tenzij je 100% zeker weet hoe dit werkt, verander er niets aan!
-- alle leden met een installatiebesluit tussen <begin jaar> en <eind jaar>
SELECT DISTINCT m FROM db:Member m
INNER JOIN m.installations i
INNER JOIN i.decision dd
INNER JOIN dd.meeting me
WHERE (DATE_DIFF(me.date, '2013-07-01') >= 0
AND DATE_DIFF(me.date, '2014-07-01') < 0)
-- Of, waar de installatie niet ongedaan gemaakt is op een manier
OR (DATE_DIFF(me.date, '2013-07-01') < 0
AND (NOT(EXISTS(
SELECT d FROM db:SubDecision\Discharge d
INNER JOIN d.installation x
INNER JOIN d.decision disd
INNER JOIN disd.meeting md
WHERE x.meeting_type = i.meeting_type
AND x.meeting_number = i.meeting_number
AND x.decision_point = i.decision_point
AND x.decision_number = i.decision_number
AND x.number = i.number
AND DATE_DIFF(md.date, '2013-07-01') < 0
AND (NOT(EXISTS(
SELECT b FROM db:SubDecision\Destroy b
INNER JOIN b.target z
WHERE z.meeting_type = d.meeting_type
AND z.meeting_number = d.meeting_number
AND z.point = d.decision_point
AND z.number = d.decision_number))))))
AND (NOT(EXISTS(
SELECT a FROM db:SubDecision\Destroy a
INNER JOIN a.target y
WHERE y.meeting_type = i.meeting_type
AND y.meeting_number = i.meeting_number
AND y.point = i.decision_point
AND y.number = i.decision_number))))