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

SQL Server如何获取重复销售行对应的交易日期

问题根因

返回行数骤减是分组维度和需求不匹配导致的:

  • 原查询仅按ProductName分组,统计的是每个产品全周期的总销售次数,因此能返回9855条售出超1次的产品结果
  • 你修改后的查询把TransactionDate加入GROUP BY,分组维度变成「产品+交易日期」组合,此时COUNT(*)统计的是同个产品在同一天的销售记录数,只有同天产生多条销售记录的产品才会命中HAVING COUNT(*) > 1的过滤条件,最终仅返回36条结果,和你要获取「所有售出超1次产品的全部交易日期」的需求完全不符。
实现方案

这个场景需要用子查询(或CTE、窗口函数)实现,核心逻辑是先圈定符合「总售出次数>1」的产品范围,再拉取这些产品对应的全量交易明细。

子查询写法(兼容性最好,支持所有SQL环境)

SELECT
    ps.TransactionDate,
    ps.ProductName,
    prod.TotalSalesQty AS QtyOfSales
FROM product_sales ps
INNER JOIN (
    -- 第一步:筛选所有售出次数超1次的产品
    SELECT
        ProductName,
        COUNT(*) AS TotalSalesQty
    FROM product_sales
    WHERE ProductID = 1
      AND ProductName IS NOT NULL
    GROUP BY ProductName
    HAVING COUNT(*) > 1
) prod ON ps.ProductName = prod.ProductName
WHERE ps.ProductID = 1
  AND ps.ProductName IS NOT NULL
ORDER BY ps.ProductName, ps.TransactionDate;

窗口函数写法(代码更简洁,支持MySQL8.0+、SQL Server、PostgreSQL等主流新版本数据库)

SELECT
    TransactionDate,
    ProductName,
    QtyOfSales
FROM (
    SELECT
        TransactionDate,
        ProductName,
        COUNT(*) OVER (PARTITION BY ProductName) AS QtyOfSales
    FROM product_sales
    WHERE ProductID = 1
      AND ProductName IS NOT NULL
) t
WHERE QtyOfSales > 1;

提示:如果业务中存在不同产品重名的情况,建议所有分组、关联逻辑都使用ProductID作为唯一匹配字段,避免重名导致的数据统计错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:42:16