实现思路
- 打开SQLite数据库连接。
- 使用窗口函数
ROW_NUMBER()
为每个客户的订单按 order_date
降序排列生成行号。
- 筛选出行号为1的记录,即每个客户最近一次订单。
- 按
customer_id
升序排列结果。
- 关闭数据库连接。
核心代码片段
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<List<Map<String, dynamic>>> getLatestOrders() async {
final database = await openDatabase(
join(await getDatabasesPath(), 'your_database_name.db'),
onCreate: (db, version) {
return db.execute(
'CREATE TABLE orders('
'order_id INTEGER PRIMARY KEY,'
'customer_id INTEGER,'
'order_date TEXT,'
'total_amount REAL'
')'
);
},
version: 1,
);
final result = await database.rawQuery('''
SELECT order_id, customer_id, order_date, total_amount
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) as row_num
FROM orders
) subquery
WHERE row_num = 1
ORDER BY customer_id ASC
''');
await database.close();
return result;
}