sql - 如何仅在日期时间列中按日期分组

标签 sql sql-server

我在 SQL Server Express 2005 中遇到分组问题

我有一个DATETIME COLUMN,但我只想按日期对其进行分组。

这是我的 SQL 语句:

SELECT (u.FirstName + ' ' + u.LastName) AS [FullName],d.user_id,CONVERT(varchar,d.log_date,101) AS log_date, min(d.login_time) as LOG_IN, max(d.logout_time) as LOG_OUT, sum(d.totaltime) as TOTHrs 
FROM tbldtr d INNER JOIN tblUsers u ON d.user_id = u.User_Id
WHERE d.user_id = 'ADMIN1' and d.log_date BETWEEN '6/1/2013' AND '6/15/2013'
GROUP BY DATEADD(day, DATEDIFF(day, 0, log_date), 0),u.FirstName,u.LastName,d.user_id order by d.log_date asc

但它给了我这个错误:

Column 'tbldtr.log_date' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

提前致谢!

最佳答案

只需将 convert(varchar,d.log_date,101) 移至 group by 子句即可:

select
    u.FirstName + ' ' + u.LastName as [FullName],
    d.user_id,
    convert(varchar, d.log_date, 101) as log_date,
    min(d.login_time) as LOG_IN,
    max(d.logout_time) as LOG_OUT,
    sum(d.totaltime) as TOTHrs 
from tbldtr d
    inner join tblUsers u on d.user_id = u.User_Id
where d.user_id = 'ADMIN1' and d.log_date between '20130601' AND '20130615'
group by
     convert(varchar, d.log_date, 101),
     u.FirstName, u.LastName, d.user_id
order by log_date asc

此外,将 where 中的日期更改为明确的格式会更安全 - YYYYMMDD

关于sql - 如何仅在日期时间列中按日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18633094/

相关文章:

mysql - 使用关键字与 ON 子句 - MYSQL

SQL Server 选择多个值,如果没有找到值,则返回 null

.net - 启用排序和分页的 T-SQL 存储过程无法正常工作

mysql - 字符串作为 mysql 表名

mysql - sql查询\作为要检查的值

mysql - 如何编写自连接查询来检查同一实体/字段的条件

SQL选择,匹配一列但不匹配另一列

sql-server - 获取 SQL 计算列插入值

c# - SQL 到 LINQ 的麻烦

sql-server - 不使用子查询的不同行计数