J'ai une table de comptes contenant des colonnes pour la date de début et la date de fin. Je souhaite que l'utilisateur fournisse une date de début et une date de fin et toutes les données doivent être renvoyées lorsque le compte était actif à tout moment entre la date de début et la date de fin spécifié par l'utilisateur. P>
La capture est que la date de fin peut être nulle si le compte est toujours actif. p>
Le compte doit être sélectionné s'il était ouvert à tout moment entre la plage spécifiée par l'utilisateur, ce qui signifie que même les comptes ouverts ou fermés entre la plage doivent être inclus. P>
Voici une photo de ce que je veux. P>
p>
La partie jaune est la plage de date entrée par l'utilisateur. Les parties vertes sont ce que je veux sélectionné. La partie rouge clair est ce que je ne veux pas de sélectionner. Les flèches à la fin de G, H et je veux dire que ces comptes n'ont pas de date de fin. Tous les autres qui n'ont pas de flèche ont une date de fin. P>
3 Réponses :
Donc, cela revient à vérifier que la date de démarrage du compte est antérieure à la date de fin de l'utilisateur et la date de fin du compte est après la date de début de l'utilisateur fourni (ou est null, auquel cas nous n'avons même pas besoin de vérifier IT):
where
account.start_date < @user_end_date and
(account.end_date >= @user_start_date or account.end_date is null)
SELECT *
FROM accounts
WHERE start_date <= @input_end_date
AND (end_date >= @input_start_date OR (end_date IS NULL AND NOW() >= @input_start_date))
SELECT
*
FROM
accounts
WHERE
(start_date >= :user_supplied_start AND start_date <= :user_supplied_end)
OR
(end_date >= :user_supplied_end AND end_date <= :user_supplied_start)
OR
(start_date <= :user_supplied_start AND end_date IS NULL)