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,这是一个考勤应用程序。用户可以随意“打卡”多少次,但只记录第一个条目。当天的第一个条目?如果一天内有多个
输入输出
,该怎么办?在不同的站点/机器上输入输出。您可以尝试发布您的尝试。