8798 sujets

Développement web côté serveur, CMS

Bonjour à tous
J'ai une table Calendar qui comprend différents types d'évènements, par exemple "concert" ou 'rehearsal'
Je cherche à retrouver le plus simplement possible la date du dernier concert et la date du prochain concert.
Je le fais actuellement en deux requêtes:

SELECT MAX(DATE(startTime))
FROM Calendar
WHERE eventType LIKE '%concert%'
AND startTime < NOW();
SELECT MIN(DATE(startTime))
FROM Calendar
WHERE eventType LIKE '%concert%'
AND startTime > NOW();

Y a-t-il un moyen de le faire en une seule requête ?
Merci de partager vos compétences.
Modérateur
Salut,

as tu pensé à ce type de requête ?

SELECT
    MAX(CASE WHEN startTime < NOW() THEN DATE(startTime) END) AS last_concert_date,
    MIN(CASE WHEN startTime > NOW() THEN DATE(startTime) END) AS next_concert_date
FROM 
    Calendar
WHERE 
    eventType LIKE '%concert%';


Au départ, j'ai pensé à l'utilisation de BETWEEN. Mais tu es obligé d'utiliser UNION ALL. Ce qui est moins performant et tu te retrouves à refaire ces 2 requêtes.
Modifié par Niuxe (13 Jul 2025 - 17:07)
Meilleure solution
Merci beaucoup, c’est ça
C’est le CASE … END qui m’échappait
Smiley biggrin
Modifié par PapyJP (14 Jul 2025 - 08:44)