I'm running a query in the database to return 6 results from a Agenda
table that has multiple available times per day (eg: 08: 10: 00: 000 | 08: 30: 00: 000 ) and for periods (ex: T
(representing 'afternoons' or M
representing 'mornings').
I'm able to recover now, but I have a problem that I can not resolve. I can only have one time for each period of the day.
Ex: I can have a 19/12/2015 time in the morning and a time in the afternoon, but never in the day > 12/19/2015 two times in the morning or afternoon.
My query looks like this:
SELECT * FROM (
SELECT TOP(3) agendaidentificador,agendadata, 'M' AS periodo
FROM AGENDA
WHERE
agendaconsumolocktempo IS NULL
AND
agendaconsumoidentificador IS NULL
AND
agendadata > GETDATE()
GROUP BY
agendaidentificador,
agendadata
HAVING
CAST(DATEPART(HOUR,agendadata) AS INT) < 12
ORDER BY
NEWID(),
agendadata asc
) A
UNION
SELECT * FROM (
SELECT TOP(3) agendaidentificador,agendadata, 'T' AS periodo
FROM AGENDA
WHERE
agendaconsumolocktempo IS NULL
AND
agendaconsumoidentificador IS NULL
AND
agendadata > GETDATE()
GROUP BY
agendaidentificador,
agendadata
HAVING
CAST(DATEPART(HOUR,agendadata) AS INT) >= 12
AND
COUNT(CAST(agendadata AS DATE)) = 1
ORDER BY
NEWID(),
agendadata asc
) B
GROUP BY
agendaidentificador,
agendadata,
periodo
HAVING
COUNT(CAST(agendadata as DATE)) = 1
ORDER BY agendadata
and the result is:
linha |agendaIdentificador | agendaData | periodo
------|--------------------|-------------------------|---------
1 | 173352 | 2015-01-12 12:50:00.000 | T
2 | 173363 | 2015-01-12 14:40:00.000 | T
3 | 175255 | 2015-01-19 11:30:00.000 | M
4 | 175520 | 2015-01-26 14:50:00.000 | T
5 | 125074 | 2015-02-25 08:20:00.000 | M
6 | 125076 | 2015-02-25 08:40:00.000 | M
And it can not happen as happened on the lines 1
and 2
.
And I'm stuck on it and I have not been able to find a solution yet.