我有问题...
我有一个请求,但每次刷新请求时,结果都会发生变化
这是我的要求
SELECT `t`.*, COUNT('ID') AS `tr` FROM (
SELECT * FROM HISTORY WHERE USER_ID = 1 AND BIEN_ID IS NOT NULL
ORDER BY CREATED_AT DESC) AS `t` WHERE (`USER_ID` = 1)
GROUP BY `t`.`BIEN_ID` ORDER BY `t`.`CREATED_AT` DESC
我实际上希望按BIEN_ID
分组,并使用最新的CREATED_AT
字段
有人可以帮助我吗?
例如,我第一次得到这个:
ID |USER_ID| BIEN_ID | CREATED_AT
205 | 1 | 36 | 2015-06-10 17:00:36
203 | 1 | 48 | 2015-06-10 17:00:2
在我得到这个之后:
ID | USER_ID| BIEN_ID | CREATED_AT
202 | 1 | 7 | 2015-06-10 16:31:48
196 | 1 | 48 | 2015-06-10 16:23:4
这是我的HISTORY DB:
ID | USER_ID| BIEN_ID | CREATED_AT
202 | 1 | 7 | 2015-06-10 16:31:48
199 | 1 | 48 | 2015-06-10 16:23:40
196 | 1 | 48 | 2015-06-09 16:23:31
140 | 1 | 7 | 2015-06-09 10:01:20
134 | 1 | 30 | 2015-06-04 09:10:11
100 | 1 | 48 | 2015-06-01 11:32:40
这就是我的期望(我希望GROUP BY ID
,COUNT相同的BIEN_ID
,并获得最新的CREATED_AT)
ID | USER_ID| BIEN_ID | COUNT | CREATED_AT
202 | 1 | 7 | 2 | 2015-06-10 16:31:48
199 | 1 | 48 | 3 | 2015-06-10 16:23:40
134 | 1 | 30 | 1 | 2015-06-04 09:10:11
答案 0 :(得分:4)
评论太长了。
您正在使用显式 documented的MySQL GROUP BY
扩展程序来返回不确定的结果。因此,你不应该对你得到的结果不确定感到惊讶。
问题是您在select *
查询中正在执行group by
。 group by
列是t.bien_id
- 我从上下文猜测这不是每行的唯一ID。 (如果是这样,计数将始终为1,并且查询将在逐个运行期间保持一致。)
具体文件是:
MySQL扩展了
GROUP BY
的使用范围,以便选择列表可以参考 未在GROUP BY
子句中命名的非聚合列。这意味着 前面的查询在MySQL中是合法的。您可以使用此功能 通过避免不必要的列排序来获得更好的性能 分组。但是,这主要适用于每个中的所有值GROUP BY
中未命名的非聚合列对于每个列都是相同的 组。服务器可以自由选择每个组中的任何值,所以 除非它们相同,否则所选择的值是不确定的。
答案 1 :(得分:1)
select a.id,a.user_id,a.bien_id,a.created_at,b.TOTAL_OCCURANCES from (select *
from temp1 where created_at in (select MAX(created_at) from temp1 group by
BIEN_ID))a , (select count(*) as TOTAL_OCCURANCES,BIEN_ID from temp1 group by
BIEN_ID) b where a.BIEN_ID=b.BIEN_ID order by CREATED_AT desc;
这将完美地按预期工作。