如何使用 SQL 选择每个唯一日期的唯一会话?
Posted
技术标签:
【中文标题】如何使用 SQL 选择每个唯一日期的唯一会话?【英文标题】:How to select unique sessions per unique dates with SQL? 【发布时间】:2020-05-23 08:13:07 【问题描述】:我正在努力处理我的 SQL。我想从表中选择唯一日期的所有唯一会话。我没有得到我想要的结果。
表格示例:
session_id | date
87654321 | 2020-05-22 09:10:10
12345678 | 2020-05-23 10:19:50
12345678 | 2020-05-23 10:20:23
87654321 | 2020-05-23 12:00:10
这是我现在的 SQL。我从日期时间列中选择所有不同的日期。我还计算了所有不同的 session_id。我按日期对它们进行分组。
SELECT DISTINCT DATE_FORMAT(`date`, '%d-%m-%Y') as 'date', COUNT(DISTINCT `session_id`) as 'count' FROM `logging` GROUP BY 'date'
我想看到的是(上面的例子):
date | count
22-05-2020 | 1
23-05-2020 | 2
我现在用我的真实表(在 3 个不同日期有 354 个会话)得到的结果是:
date | count
21-05-2020 | 200
编辑
将 ` 更改为 '。
【问题讨论】:
您使用的是哪个 SQL 引擎?请提供样本数据和预期结果。 只需从此处删除 DISTINCT:COUNT(DISTINCT session_id)
,您将获得每个日期的所有会话数。如果您想要唯一的会话,那么您的查询就可以了。
从 COUNT(DISTINCT session_id) 中删除 DISTINCT 得到相同的结果
【参考方案1】:
字段名称和别名名称相同(date
)。请尝试为别名使用不同的名称以避免在 GROUP BY 部分中混淆
【讨论】:
与别名日期混淆是问题所在。谢谢!【参考方案2】:您可能希望根据日期表达式进行分组
SELECT DATE_FORMAT(`date`, '%d-%m-%Y') as `date`, COUNT(DISTINCT `session_id`) as `count` FROM `logging` GROUP BY DATE_FORMAT(`date`, '%d-%m-%Y')
【讨论】:
以上是关于如何使用 SQL 选择每个唯一日期的唯一会话?的主要内容,如果未能解决你的问题,请参考以下文章