Разделить столбец даты, затем сгруппировать по дате и получить максимальные значения в SQL - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю в системе посещаемости, я хочу получить МАКС. Значение даты входа пользователя в систему.

Ниже приведен простой запрос на выборку

SELECT * FROM  CHECKINOUT 
WHERE USERID = 244
ORDER BY CHECKTIME DESC

Результат запроса выше

   USERID   CHECKTIME
244 2/12/20 14:56
244 2/12/20 12:04
244 2/12/20 12:04
244 2/12/20 12:04
244 2/12/20 12:04
244 2/12/20 12:03
244 2/12/20 12:03
244 2/12/20 12:03
244 2/12/20 12:03
244 2/12/20 11:00
244 2/11/20 15:04
244 2/11/20 14:17
244 2/11/20 11:00
244 2/11/20 10:59
244 2/11/20 10:59
244 2/11/20 10:58
244 2/11/20 10:57
244 2/11/20 10:57
244 2/11/20 10:57
244 2/10/20 14:50
244 2/10/20 13:58
244 2/7/20 15:39
244 2/7/20 9:18

Я делю столбец CHECKTIME на дату и время

SELECT USERID, 
        ( CONVERT(VARCHAR(20), CHECKTIME, 101) ) AS DATEPART,
        ( CONVERT(VARCHAR(20), CHECKTIME, 108) ) AS TIMEPART    
FROM     CHECKINOUT 

WHERE USERID = 244
GROUP BY USERID, CHECKTIME
ORDER BY CHECKTIME DESC

Результат

USERID  DATEPART    TIMEPART
244 2/12/2020   14:56:57
244 2/12/2020   12:04:32
244 2/12/2020   12:04:17
244 2/12/2020   12:04:13
244 2/12/2020   12:04:06
244 2/12/2020   12:03:40
244 2/12/2020   12:03:35
244 2/12/2020   12:03:28
244 2/12/2020   12:03:01
244 2/12/2020   11:00:23
244 2/11/2020   15:04:01
244 2/11/2020   14:17:57
244 2/11/2020   11:00:50
244 2/11/2020   10:59:29
244 2/11/2020   10:59:21
244 2/11/2020   10:58:10
244 2/11/2020   10:57:35
244 2/11/2020   10:57:33
244 2/11/2020   10:57:29
244 2/10/2020   14:50:19
244 2/10/2020   13:58:54
244 2/7/2020    15:39:44
244 2/7/2020    9:18:47

Мой желанный результат равен

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

Теперь я хочу получить максимальное время для каждой даты. Ребята, вы можете мне помочь?

Ответы [ 3 ]

1 голос
/ 12 февраля 2020

Вы можете попробовать следующее

SELECT USERID,
       CAST(CHECKTIME AS DATE) DATEPART,
       MAX(CAST(CHECKTIME AS TIME)) as MAX_TIME
FROM CHECKINOUT
GROUP BY USERID,CAST(CHECKTIME AS DATE)
ORDER by CAST(CHECKTIME AS DATE) DESC

ПРОВЕРЬТЕ ДЕМО ЗДЕСЬ

ВЫХОД

+--------+------------+----------+
| USERID | DATEPART   | MAX_TIME |
+--------+------------+----------+
| 244    | 2020-02-12 | 14:56:00 |
+--------+------------+----------+
| 244    | 2020-02-11 | 15:04:00 |
+--------+------------+----------+
| 244    | 2020-02-10 | 14:50:00 |
+--------+------------+----------+
| 244    | 2020-02-07 | 15:39:00 |
+--------+------------+----------+
0 голосов
/ 12 февраля 2020
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
0 голосов
/ 12 февраля 2020
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...