J'ai une base de données où chaque jour une liste d'employés se fait insérer. C'est un serveur SQL 2008. Cela pourrait donc être que la liste est peut-être la même chose, mais elle pourrait également être qu'un nouvel employé a été ajouté. J'ai un champ avec le Temps-temps de la journée à partir de l'enregistrement, du nom et ainsi de suite. Voici la sélection simple: renvoie 853 lignes p> retourne 850 rangées p> Comment puis-je obtenir le 3 rangées neuves entre ces deux dates? "numéro" est le pkure dans ce cas. p> p>
4 Réponses :
Utilisez la jointure gauche pour connaître les lignes manquantes
select * from
(
SELECT timestamp, number, rhyth FROM employees WHERE timestamp = '2020-07-13'
)A left join
(
SELECT timestamp, number, rhyth FROM employees WHERE timestamp = '2020-07-10'
)B on A.number=b.number where b.number is null
Un JOOK complet code> est meilleur. Il n'y a aucune garantie qu'une seule table a tous les employés
Que diriez-vous des inégalités?
SELECT timestamp, number, rhyth FROM employees WHERE timestamp > '2020-07-10' AND timestamp <= '2020-07-13'
Si vous souhaitez rechercher des employés qui n'existaient pas avant, utilisez supprimer p> Si vous ne voulez pas restreindre cela à une date donnée, mais voir tous les employés avec leur première entrée. P> Une autre option: p> n'existe pas code>: select number, min(timestamp)
from employees
group by number
--having min(timestamp) = '2020-07-13';
Le plus facile serait probablement d'utiliser Vous pouvez également utiliser dans code>: sauf code>: p> SELECT number FROM employees WHERE timestamp = '2020-07-13'
EXCEPT
SELECT number FROM employees WHERE timestamp = '2020-07-10'
Et si 3 nouveaux employés se sont joints entre les 2 dates?