0
votes

Colonne de date divisée puis groupe par date et obtenez des valeurs maximales dans SQL

Je travaille sur un système de présence, je souhaite obtenir la valeur maximale de la connexion de l'utilisateur à la date.

suivi est une simple requête de sélection de sélection p> xxx pré>

résultat de la requête ci-dessus p> xxx pré>

i fractionnée checktime code> dans la date et l'heure p> xxx pré>

résultat

USERID  DATEPART    TIMEPART
244 2/12/2020   14:56:57
244 2/11/2020   15:04:01
244 2/10/2020   14:50:19
244 2/7/2020    15:39:44
244 2/6/2020    18:21:04


2 commentaires

Quelle est votre production attendue? max () avec groupe par ne fonctionne pas? Et quelle est votre version SQL Server? Veuillez également ne pas publier les échantillons de données comme une image, mais le poster comme un texte.


@Arunpalanisamy j'ai mis à jour ma question avec ma sortie souhaitée. Et SQL Server est 2019


3 Réponses :


0
votes
create table #temp
(USERID int,CHECKTIME datetime)


insert into #temp values (244 ,'2/12/20 14:56')
insert into #temp values (244 ,'2/12/20 12:04')
insert into #temp values (244 ,'2/12/20 12:04')
insert into #temp values (244 ,'2/12/20 12:04')
insert into #temp values (244 ,'2/12/20 12:04')
insert into #temp values (244 ,'2/12/20 12:03')
insert into #temp values (244 ,'2/12/20 12:03')
insert into #temp values (244 ,'2/12/20 12:03')
insert into #temp values (244 ,'2/12/20 12:03')
insert into #temp values (244 ,'2/12/20 11:00')
insert into #temp values (244 ,'2/11/20 15:04')
insert into #temp values (244 ,'2/11/20 14:17')
insert into #temp values (244 ,'2/11/20 11:00')
insert into #temp values (244 ,'2/11/20 10:59')
insert into #temp values (244 ,'2/11/20 10:59')
insert into #temp values (244 ,'2/11/20 10:58')
insert into #temp values (244 ,'2/11/20 10:57')
insert into #temp values (244 ,'2/11/20 10:57')
insert into #temp values (244 ,'2/11/20 10:57')
insert into #temp values (244 ,'2/10/20 14:50')
insert into #temp values (244 ,'2/10/20 13:58')
insert into #temp values (244 ,'2/7/20 15:39' )
insert into #temp values (244 ,'2/7/20 9:18'  )

    select USERID,[DATEPART],max(timepart)[timepart] from (
    SELECT USERID, 
         cast(CHECKTIME as date)  AS DATEPART,
         cast(CHECKTIME as time)  AS TIMEPART    
FROM     #temp 

WHERE USERID = 244
) as t
group by USERID,DATEPART
drop table #temp

2 commentaires

J'ai essayé ceci, mais cela donne l'erreur suivante colonne "checkinout.checktime" n'est pas valide dans la clause de la commande par la clause de l'ordre, car il n'est pas contenu dans une fonction agrégée ou le groupe par clause.


Et si j'utilise max dans l'ordre en donnant un seul enregistrement



1
votes

Vous pouvez essayer ce qui suit xxx

chèque Démo ici

sortie xxx


0 commentaires

0
votes
select USERID,
       cast(checktime as date) DATEPART,
      MAX(cast(checktime as time)) as TIMEPART
from checkinout
group BY userid,cast(checktime as date)
order by cast(checktime as date) desc

1 commentaires

Bonjour et bienvenue à Stackoverflow, et merci d'avoir répondu. Bien que ce code puisse répondre à la question, pouvez-vous envisager d'ajouter des explications à ce que le problème était résolu et comment vous l'avez résolu? Cela aidera les futurs lecteurs à mieux comprendre votre réponse et en apprendre.