Skip to content

Important Queries

Pieter Kokx edited this page Jan 26, 2015 · 1 revision

Deze pagina is een verzamelpagina voor handige queries voor de secretaris.

Actieve leden in periode

-- 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))))
Clone this wiki locally