You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SQLite数据库中查找符合条件的非唯一值并计算最新费用总和

解决SQLite中获取非唯一组合最新费用总和的问题

看起来你需要从billing表中,针对重复出现的Account+Product组合(也就是你说的“非唯一值”),提取每组的最新费用,最后计算这些费用的总和。我来一步步帮你实现这个需求:

步骤1:筛选非唯一组合并获取每组最新日期

首先我们要先定位那些出现过多次的Account+Product配对,同时拿到每组的最新日期:

SELECT Account, Product, MAX(Date) AS LatestDate
FROM billing
GROUP BY Account, Product
HAVING COUNT(*) > 1 -- 只保留出现多次的非唯一组合

这里的HAVING COUNT(*) > 1就是筛选条件,确保我们只处理有重复记录的组合。

步骤2:关联原表获取对应最新费用

把上面的查询结果和原表关联,就能拿到每组最新日期对应的费用值:

SELECT b.Charge
FROM billing b
INNER JOIN (
    SELECT Account, Product, MAX(Date) AS LatestDate
    FROM billing
    GROUP BY Account, Product
    HAVING COUNT(*) > 1
) latest ON b.Account = latest.Account 
         AND b.Product = latest.Product 
         AND b.Date = latest.LatestDate

步骤3:计算最新费用的总和

最后用SUM()函数把这些费用加起来,得到最终结果:

SELECT SUM(b.Charge) AS TotalLatestCharges
FROM billing b
INNER JOIN (
    SELECT Account, Product, MAX(Date) AS LatestDate
    FROM billing
    GROUP BY Account, Product
    HAVING COUNT(*) > 1
) latest ON b.Account = latest.Account 
         AND b.Product = latest.Product 
         AND b.Date = latest.LatestDate

用你的示例数据测试

代入你给出的表数据:

  • Account1+Water是唯一的非唯一组合,最新日期是04-02,对应费用20
  • 其他组合(Account2+Phone、Account3+Water)都只出现一次,不会被计入
    最终计算出的总和就是20,完全符合预期。

⚠️ 小提醒:你的Date字段是MM-DD格式,如果涉及跨年数据,建议改成YYYY-MM-DD的标准日期格式,这样MAX(Date)的排序逻辑才会更准确。如果只有月日,SQLite会按字符串排序,当前示例的情况是没问题的,但跨月场景要确保逻辑符合你的需求。

内容的提问来源于stack exchange,提问作者user7722705

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:55:56