MST

星途 面试题库

面试题:Flutter中SQLite复杂查询与过滤

在Flutter中利用SQLite进行开发,假设有一个包含'orders'表的数据库,表中有'order_id', 'customer_id', 'order_date', 'total_amount'字段。现在需要查询出每个客户最近一次订单的信息,包括订单ID、客户ID、订单日期及总金额,且按客户ID升序排列,简述实现思路并给出核心代码片段。
24.5万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 打开SQLite数据库连接。
  2. 使用窗口函数 ROW_NUMBER() 为每个客户的订单按 order_date 降序排列生成行号。
  3. 筛选出行号为1的记录,即每个客户最近一次订单。
  4. customer_id 升序排列结果。
  5. 关闭数据库连接。

核心代码片段

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;
}