我有一张桌子user_comission_configuration_history
我需要从一个中选择最后一个佣金配置user_id
.
Tuples:
我尝试了很多查询,但是结果是错误的。我最后的SQL:
SELECT *
FROM(
SELECT * FROM user_comission_configuration_history
ORDER BY on_date DESC
) AS ordered_history
WHERE user_id = 408002
GROUP BY comission_id
上述查询的结果是:
但是,正确的结果是:
id user_id comission_id value type on_date
24 408002 12 0,01 PERCENTUAL 2014-07-23 10:45:42
23 408002 4 0,03 CURRENCY 2014-07-23 10:45:41
21 408002 6 0,015 PERCENTUAL 2014-07-23 10:45:18
mySQL 出了什么问题?
这是您的查询:
SELECT *
FROM (SELECT *
FROM user_comission_configuration_history
ORDER BY on_date DESC
) AS ordered_history
WHERE user_id = 408002
GROUP BY comission_id;
您的查询的一个主要问题是它使用 MySQL 扩展来group by
那个MySQL明确地警告反对。扩展是使用中的其他列select
那些不在group by
或在聚合函数中。警告(here) is:
MySQL扩展了GROUP BY的使用,使得选择列表可以引用
未在 GROUP BY 子句中命名的非聚合列。这意味着
前面的查询在 MySQL 中是合法的。您可以使用此功能
通过避免不必要的列排序来获得更好的性能
分组。然而,这主要是当每个值中的所有值
未在 GROUP BY 中命名的非聚合列对于每个列都是相同的
团体。服务器可以自由地从每个组中选择任何值,因此
除非它们相同,否则选择的值是不定.
因此,列中返回的值是不定.
这是一个非常有效的方法来获得你想要的东西(“commission”的英文拼写正确):
SELECT *
FROM user_commission_configuration_history cch
WHERE NOT EXISTS (select 1
from user_commission_configuration_history cch2
where cch2.user_id = cch.user_id and
cch2.commission_id = cch.commission_id and
cch2.on_date > cch.on_date
) AND
cch.user_id = 408002;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)