我正在尝试从MySQL数据库中获取每个成员的最新事务,其中每个成员可能具有不同数量的事务记录。我还必须将交易表链接到customers表,以确保我没有得到任何特殊订单记录。
这是我的SQL:
Select membertransactions.maingym_id,
membertransactions.member_id,
membertransactions.action_id,
Max(membertransactions.date_time) As 'Latest Transaction Date',
membertransactions.date_time
From bd1.membertransactions
Inner Join db1.customers
On membertransactions.member_id = customers.id
Where customers.orderno <>'SPECIAL ORDER'
AND membertransactions.main_id = 1
AND Date_Format(membertransactions.date_time,'%Y%m%d') < '20121101'
Group By membertransactions.member_id, 'Latest Transaction Date'
每个客户我得到一行,但它并不总是按时间顺序排列的最新行。我真的被困在这里,非常感谢任何提供的帮助。
由于
答案 0 :(得分:2)
因为您正在使用mysql,所以您可以使用mysql的一个特殊功能来完成这项工作。方法如下:
select * from (
Select
membertransactions.maingym_id,
membertransactions.member_id,
membertransactions.action_id,
membertransactions.date_time
From bd1.membertransactions
Join db1.customers On membertransactions.member_id = customers.id
Where customers.orderno <> 'SPECIAL ORDER'
AND membertransactions.main_id = 1
AND Date_Format(membertransactions.date_time,'%Y%m%d') < '20121101'
order by membertransactions.date_time desc) x
Group By member_id
我完全删除了max(date)
内容,内部选择以最新的第一个日期顺序获取所有记录,然后通过member_id获取外部选择组。这是关键:在mysql中,如果你有一个组,而没有聚合其余列,那么你将得到该组的第一个行。
其他数据库会在此SQL上出现语法错误,但在mysql中它的作用就像魅力
另请注意更易读的格式。我从来没有理解为什么人们使用“左对齐每行第二个字”格式。我希望我能找到那个第一个做过那个并让他鞭打的人。