我有一个名为Transaction
的表用于客户交易,它包含:
CustomerID,
Datetrans (transaction date)
Timetrans (transaction time)
我想返回max(Datetrans),因为客户每天可以进行两次交易;我想获得最大Datetrans日期的Timetrans的最大值。
我试过了:
SELECT CustomerID, MAX(Datetrans), MAX(Timetrans) FROM Transaction
它返回整个表中的所有时间最大时间值,而不是取决于最大日期。 我也尝试了一些连接(外部和内部),交替max(Datetrans)和max(Timetrans)并且由于某种原因它没有经历。 请帮助!
答案 0 :(得分:0)
首先,您需要GROUP BY
才能获得多行:
SELECT CustomerID, MAX(Datetrans), MAX(Timetrans)
FROM Transaction
GROUP BY CustomerId;
但我真正认为你想要的是最新的日期/时间组合。这是一种方法:
select t.*
from transaction t
where t.date = (select max(t2.date)
from transaction t2
where t2.customerid = t.customerid
) and
t.time = (select max(t2.time)
from transaction t3
where t3.customerid = t.customerid and
t3.date = t.date
);
还有其他方法。如果您存储了一个日期/时间值(并且可以将它们组合为max()
)或者MySQL具有窗口函数,那么这将更简单。另一种方法使用元组:
select t.*
from transaction t
where not exists (select 1
from transaction t2
where t2.customerid = t.customerid and
(t2.date, t2.time) > (t.date, t.time)
);
或:
select t.*
from transactions t
where (t.date, t.time) = (select t2.date, t2.time
from transaction t2
where t2.customerid = t.customerid
order by t2.date desc, t2.time desc
limit 1
);
答案 1 :(得分:0)
通过将两个单独的字段转换为单个时间戳字段,您可以使用一个更简单的查询来完成此操作。我对性能一无所知。
SELECT customerID, DATE(maxTime) as datetrans, TIME(maxTime) as timeTrans
FROM (
select customerID, max(Timestamp(dateTrans, timeTrans)) as maxTime
from transactions
group by customerID) as lastCustomerTrans
您需要外部查询的唯一原因是将时间戳转换回日期和时间。