我正在尝试从SQLServer表中获取每日唯一用户数。
表的外观示例:
user_id start_timestamp activity
111 08/25/2020 13:23 aaaa
111 08/25/2020 14:24 bbbb
222 08/25/2020 14:26 cccc
222 08/25/2020 14:28 dddd
333 08/25/2020 14:31 eeee
我要查找的结果表示例:
user_id start_date count
111 08/25/2020 2
222 08/25/2020 2
333 08/25/2020 1
这就是我尝试过的。”
SELECT
[user_id],
CONVERT(VARCHAR,[start_timestamp], 23) as [start_date]
COUNT([user_id]) AS [user_count]
FROM [dbo].[user_activity]
GROUP BY [user_id],[start_date]
ORDER BY [start_date]
我不得不将时间戳中的日期转换为组的日期,但我不断收到错误消息:
列名“开始日期”无效。
4条答案
按热度按时间7xzttuei1#
在单个select语句中,不能使用GROUPBY子句中的select子句设置的别名。
您可以通过简单地重复别名之前的信息来避免这种情况,如下所示
我更希望看到您将时间戳转换为日期,而不是转换为字符串。
7lrncoxx2#
您需要将转换日期列添加到grı按节向上。
u5rb5r593#
列别名
[start_date]
是在GROUP BY
进行评估。而是使用派生表(子查询)首先获取
[start_date]
,然后GROUP BY
.nkcskrwz4#
你不应该改成
varchar
没有时间的约会。改为转换为date
.正如其他人提到的,不能重用
select
中的别名group by
. 你可以重复同样的话convert
再说一次,但更好的方法是把它放到cross apply
,这允许您以后重用它。您还应该使用适当的表别名。