我正在尝试从MySQL数据库中获取每个成员的最新事务,其中每个成员可能具有不同数量的事务记录。 我还必须将交易表链接到客户表,以确保我不会获得任何特殊订单记录。
这是我的 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'
我为每个客户获得一行,但并不总是按时间顺序排列的最新行。 我真的被困在这里,非常感谢提供的任何帮助。
谢谢
因为你使用的是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中它就像一个魅力
另请注意更具可读性的格式。我一直不明白为什么人们使用"每行的左对齐第二个单词"格式。我希望我能找到第一个这样做的人,并让他鞭打。