以下是样本数据
let operation = AsynchronousBlockOperation { [weak self] finalise in
return session.dataTask(with: url) {
...
finalise() // This will finish operation
}
}
以下是预期输出
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
答案 0 :(得分:1)
当有两列定义排序时,这很棘手。这是一种方法:
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)
上的索引应该对性能有所帮助。
答案 1 :(得分:0)
这是一种返回指定结果的方法:
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
函数的严重性。如果有适当的索引,我们会(可能) )避免全扫描和昂贵的“使用filesort”操作。)