Sql server 仅显示同一日期不同时间的多个条目中的单个记录

Sql server 仅显示同一日期不同时间的多个条目中的单个记录,sql-server,Sql Server,我有一个包含以下示例数据的表: |UserID|DateTime | | 1 |2019-01-01 11:30:00| | 1 |2019-01-01 12:30:00| | 2 |2019-01-01 10:35:00| | 2 |2019-01-01 11:45:00| | 3 |2019-01-01 12:36:01| | 3 |2019-01-01 14:23:12| | 1 |2019-01-02 11:12:11| |

我有一个包含以下示例数据的表:

|UserID|DateTime           |
| 1    |2019-01-01 11:30:00|
| 1    |2019-01-01 12:30:00|
| 2    |2019-01-01 10:35:00|
| 2    |2019-01-01 11:45:00|
| 3    |2019-01-01 12:36:01|
| 3    |2019-01-01 14:23:12|
| 1    |2019-01-02 11:12:11|
| 2    |2019-01-02 11:30:12|
| 2    |2019-01-02 12:12:00|
| 3    |2019-01-02 10:14:00|
| 3    |2019-01-02 11:00:00|
应为以下查询输出:

|UserID|DateTime           |
| 1    |2019-01-01 11:30:00|
| 2    |2019-01-01 10:35:00|
| 3    |2019-01-01 12:36:01|
| 1    |2019-01-02 11:12:11|
| 2    |2019-01-02 11:30:12|
| 3    |2019-01-02 10:14:00|
我知道
selectdistinct
应该是一个好的开始,但因为它涉及一个日期时间列,我不知道从哪里开始

已解决

使用DarkRob的建议:

SELECT UserID, MIN(DateTime) AS DATE FROM targettable GROUP BY UserID, CONVERT(varchar(10), DateTime, 23)
请注意,我使用CONVERT而不是CAST,因为在MSSQL2005上运行时会抛出错误。您可以尝试此操作

select UserId, Min(datetime) as Datetime
from [table]
group by UserId, Cast(datetime as date)


您可以使用窗口函数并编写查询,如下所示

SELECT UserID, DateTime
FROM
(
    SELECT UserID, DataTime
        , ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY DateTime) AS rnk
    FROM Table1
)
WHERE rnk = 1

这里的逻辑是什么?你能解释一下吗?嗨,Squirrel,这是一个考勤应用程序。用户可以随意“打卡”多少次,但只记录第一个条目。当天的第一个条目?如果一天内有多个
输入输出
,该怎么办?在不同的站点/机器上输入输出。您可以尝试发布您的尝试。