Wil*_*lBD 4 mysql date counting
我有一个生成如下表的查询:
Login_Date Username
----------------------------------------------
1/1/10 user-1
1/1/10 user-1
1/1/10 user-2
1/2/10 user-1
1/2/10 user-2
1/3/10 user-1
1/3/10 user-1
1/3/10 user-1
1/3/10 user-3
Run Code Online (Sandbox Code Playgroud)
查询如下所示:
SELECT Date_Used, Name AS licenseNames FROM B, A WHERE A.License_Key = B.License_Key ORDER BY Date_Used ;
Run Code Online (Sandbox Code Playgroud)
这很好,但我需要它来生成日期列表,对于每个日期,它都会为我提供当天登录的用户列表,以及他们登录的次数。我已经查看了所有内容试图找到一个简洁的解决方案,但这只是死胡同。
我想要发布的结果如下所示:
Login_Date Username # of Times logged in
--------------------------------------------------
1/1/10 user-1 2
1/1/10 user-2 1
1/2/10 user-1 1
1/2/10 user-2 2
1/3/10 user-1 3
1/3/10 user-3 1
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,这让我发疯。
编辑
以下是相应的表格,以避免混淆:
表 A 列:
--------------------------
ID License_Key Name
Run Code Online (Sandbox Code Playgroud)
表 B 列:
------------------------------
ID Date_Used License_Key
Run Code Online (Sandbox Code Playgroud)
编辑 2
根据评论请求,到目前为止,所有解决方案都在实际表上提供了相同的结果(尽管 SQL Fiddle 适用于所有表,所以..?)
我得到的结果如下:
Login_Date UserName Cnt (or NumLogins for the other solution)
---------------------------------------------------------------------
01-01-10 user-1 1
01-01-10 user-1 1
01-01-10 user-2 1
01-02-10 user-1 1
01-02-10 user-1 1
01-02-10 user-1 1
01-02-10 user-1 1
Run Code Online (Sandbox Code Playgroud)
等等等等。所以到目前为止,在所有答案中看起来都是按命令分组的只是做..什么都不做??非常混淆...
您必须使用带有 COUNT(*) 聚合函数的GROUP BY查询。由于 Date_Used 是一个 DATETIME 列,它可以包含 DATE 部分,也可以包含 TIME 部分,因此您必须使用DATE()函数仅提取 DATE 部分:
SELECT
DATE(Date_Used),
Name AS licenseNames,
COUNT(*) AS logins
FROM
B INNER JOIN A
ON A.License_Key = B.License_Key
GROUP BY
DATE(Date_Used),
Name
ORDER BY
DATE(Date_Used),
Name
Run Code Online (Sandbox Code Playgroud)