J'ai une table de présence qui stocke des données telles que celles-ci:
emp_id Action Time 1 IN 2019-12-22 09:00:00 1 OUT 2019-12-22 09:15:00 2 IN 2019-12-22 09:00:00 2 OUT 2019-12-22 09:15:00 2 IN 2019-12-22 09:30:00
3 Réponses :
TEST
SELECT COUNT(DISTINCT s.emp_id)
FROM sourcetable s
WHERE s.action = 'IN'
AND NOT EXISTS ( SELECT NULL
FROM sourcetable ss
WHERE s.emp_id = ss.emp_id
AND s.time < ss.time
AND ss.action = 'OUT' )
Je n'ai jamais vu quelqu'un choisir NULL à partir d'une sous-requête corrélée pour pas exister - n'est-ce pas toujours utilisé?
Mais null n'est pas une valeur.
Vous pouvez utiliser non pas existant et une sous-requête corrélée, mais je pense que l'utilisation de jointures gauche est claire (il est également plus facile de modifier pour des cas d'utilisation complexes - par exemple dans le bâtiment pendant 5 minutes.)
Premier quand La dernière fois que quelqu'un est venu dans le bâtiment p> alors la dernière fois que quelqu'un est sorti p> Nous pouvons entrer et comme ceci p> si sortie est avant, ils sont dans p> * Notez comment vous avez une valeur zéro horodatage dépendra de votre plate-forme. p> Si vous ne savez pas comment faire 0, cela fonctionnera, mais vous ne pouvez pas avoir d'intérieur et de sortir exactement la même chose dans les données source p>
@Akina - Bien sûr. Je fais quelque chose d'un peu plus avancé ici. Je montre à la fois comment obtenir des informations sur qui est entré et qui est sortie, mais aussi pour rejoindre celles-ci afin que vous puissiez faire une analyse sur les résultats. Comme j'écris une réponse, j'ai pensé que je devrais tenter de conférer des emporter utiles. Je suis conscient que je n'ai pas répondu directement à la question dans le moins de caractères. Si vous voulez cela, regardez ensuite la réponse de Gordon.
J'ai utilisé une jointe à gauche parce que nous ne sommes pas certains que chaque identifiant d'employé a un enregistrement enregistré et un enregistrement de sortie. Ceci est un modèle standard.
Gauche Rejoignez Akina - Emp_List CODE> a la liste complète et les sous-requêtes peuvent avoir un sous-ensemble. Je veux toutes les valeurs dans Emp_List CODE> Joignée à d'autres requêtes qui ont moins. Il n'y a pas d'erreur. C'est aussi pourquoi la coalesce est nécessaire.
Si vous voulez que le nombre actuel et que vos données soient exactes (pas de duplication et ainsi de suite), utilisez simplement l'agrégation:
select sum(case when action = 'IN' then 1
when action = 'OUT' then -1
end)
from attendance;
Très bien alors, allez-y et écrivez la requête.
Quelle version mysql?
Bienvenue Sharad, de son mieux pour lui donner un coup et me montrer de sorte que vous pourriez avoir peu de commentaires sur votre tentative et améliorer
Je pense que ce que vous entendez par "actuellement" consiste à comparer la colonne "Time" à la journée d'aujourd'hui?
un cadeau au bureau? Cela signifie-t-il qu'il y a un père Noël secret?