具有Group By和SubString的MySQL Min和Max Date

时间:2012-01-12 22:32:22

标签: mysql group-by

我正在开发一个项目,我需要从数据库中获取最小和最大日期,并将字段的第一部分分解为字符并按此字段进行分组。所以基本上在数据库中我有

  

2012-01-01未知的用户名/密码尝试登录。用户:admin

     

2012-01-01无法添加用户帐户。 MySQL错误:确定我的sql   错误未知

     

2012-01-02无法添加用户帐户。 MySQL错误:确定我的sql   错误未知

     

2012-01-04未知的用户名/密码尝试登录。用户:   管理员

以下是我正在使用的查询,但没有显示日期

SELECT ala_type, partMsg, 
wholeMsg, ala_level, ala_page, COUNT(wholeMsg) AS msgCount FROM
(
SELECT ala_type, SUBSTRING_INDEX(ala_message, ':', 1) AS partMsg, ala_message AS wholeMsg,
ala_level, ala_page FROM alarms a) p
GROUP BY partMsg

这个位按预期正确分组,但是如果我尝试添加min(date_field),那么它只显示一条记录。

以下是我尝试的查询

  

SELECT ala_date,min(ala_date),max(ala_date),ala_type,partMsg,   wholeMsg,ala_level,ala_page,COUNT(wholeMsg)AS msgCount FROM(   SELECT ala_date,min(ala_date),max(ala_date),ala_type,   SUBSTRING_INDEX(ala_message,':',1)AS partMsg,ala_message AS   wholeMsg,ala_level,ala_page FROM报警a)p GROUP BY partMsg

如果我没有在第二个语句中放入ala_date并且只有min(ala_date),则说它找不到字段ala_date。但是,当我运行查询时,我只获得一条记录,我本来希望看到以下内容

  

2012-01-01 2012-01-04未知的用户名/密码尝试登录。用户:2

     

2012-01-01 2012-01-02无法添加用户帐户。 MySQL错误:>某些mysql错误2

2和预期结果的结束是计算消息发生的次数。

我实际得到的是:

  

2012-01-01 2012-01-01 2012-01-01无法添加用户帐户... 1

现在只显示1条记录,而最小值和最大值仅相同,且计数为1而不是2。

我能做些什么才能得到我期望得到的东西。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

你会做类似的事情(我的mysql生锈了)但是theoiry是合理的。

Select SomeDate,SomeMessage From SomeTable
inner join (
Select Min(SomeDate) as SomeDate From SomeTable) earliest
On earliestDate.SomeDate = SomeTable.SomeDate

即找到每个组的最小日期,然后联接回原始表以查找同一日期的记录。