我正在开发一个项目,我需要从数据库中获取最小和最大日期,并将字段的第一部分分解为字符并按此字段进行分组。所以基本上在数据库中我有
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。
我能做些什么才能得到我期望得到的东西。
感谢您提供的任何帮助。
答案 0 :(得分:0)
你会做类似的事情(我的mysql生锈了)但是theoiry是合理的。
Select SomeDate,SomeMessage From SomeTable
inner join (
Select Min(SomeDate) as SomeDate From SomeTable) earliest
On earliestDate.SomeDate = SomeTable.SomeDate
即找到每个组的最小日期,然后联接回原始表以查找同一日期的记录。