
[英]MYSQL: Finding out last record from multiple records each having same value for a particular column
[英]MySQL last record in each group with multiple records in same date
以下是样本数据
row_id cust txn_dt txn_amount
-------------------------------------
1 1 31-01-2018 3000
2 1 04-02-2018 4000
3 1 04-02-2018 6000
4 2 29-01-2018 2500
5 2 02-02-2018 3900
6 1 01-02-2018 5000
7 1 01-02-2018 3900
以下是预期的输出
row_id cust txn_dt txn_amount
-------------------------------------
3 1 04-02-2018 6000
5 2 02-02-2018 3900
需要根据日期选择每个客户的最新记录,然后选择row_id
当有两列定义顺序时,这很棘手。 这是一种方法:
select t.*
from t
where t.row_id = (select t2.row_id
from t t2
where t2.cust = t.cust
order by t2.txn_date desc, row_id desc
limit 1
);
t(cust, txn_date, row_id)
的索引应该对性能有所帮助。
这是一种将返回指定结果的方法:
SELECT t.row_id
, t.cust
, t.txn_date
, t.txn_amount
FROM ( SELECT r.cust
, MAX(r.row_id) AS max_row_id
FROM ( SELECT p.cust
, DATE_FORMAT(
MAX(
STR_TO_DATE( p.txn_date ,'%d-%m-%Y')
)
,'%d-%m-%Y'
) AS max_txn_date
FROM sample_data p
GROUP BY p.cust
) q
JOIN sample_data r
ON r.cust = q.cust
AND r.txn_date = q.max_txn_date
GROUP BY r.cust
) s
JOIN sample_data t
ON t.cust = s.cust
AND t.row_id = s.max_row_id
ORDER BY t.row_id ASC
内嵌视图q
获取最新txn_date
每个cust
内嵌视图s
获取最大row_id
最新值txn_date
每个cust
(如果txn_date
列是DATE
数据类型,则可以避免使用STR_TO_DATE
和DATE_FORMAT
函数的STR_TO_DATE
。如果有适当的索引可用,我们(可能)将避免完全扫描和昂贵的“使用文件排序”操作。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.