如何获得过去 365 天内购买次数最多但之前没有购买过的客户?

时间:2021-05-31 15:30:53

标签: sql sql-server

我在编写此 sql 查询时遇到问题。基本上,我需要找到在过去 365 天内拥有最多 nSales,但在 365 天内销售额为零的前 100 家公司。这是在节点中完成的,所以它是一个字符串,我也在传递参数。开始日期是 365 天前的日期。

当我运行它时不会抛出任何错误,但它也不会返回任何数据。

  getMostSales365NoneBefore(startDate) {
    let sqlQuery = '';

    sqlQuery =
      "SELECT TOP 100 SUM(nQuoteTotal) AS nSales, sCompany FROM Customer_Quotes WHERE (bDeleted=0 AND sStatus='Closed' AND dtFirstClosed > " +
      "'" +
      startDate +
      "')" +
      ' AND (nSales < ' +
      "'" +
      startDate +
      "') IS NOT NULL" +
      ' GROUP BY sCompany ORDER BY nSales DESC';

    console.log(sqlQuery);

    return sqlQuery;
  }, ```

1 个答案:

答案 0 :(得分:1)

您应该正确地参数化您的查询,并将 @startDate 作为参数传递。

请注意,您不能在 WHERE 部分中引用聚合,只能在 HAVINGORDER BYSELECT 中引用

你想要的查询看起来像这样

SELECT TOP (100)
    SUM(CASE WHEN dtFirstClosed >= @startDate THEN nQuoteTotal END) AS nSales,
    sCompany
FROM Customer_Quotes
WHERE bDeleted = 0
    AND sStatus = 'Closed'
GROUP BY sCompany
HAVING COUNT(CASE WHEN dtFirstClosed < @startDate THEN 1 END) = 0
ORDER BY nSales DESC