Sql 如果会员每月购买超过6台,需要帮助拉行吗

Sql 如果会员每月购买超过6台,需要帮助拉行吗,sql,sql-server,excel,Sql,Sql Server,Excel,我想运行一个pull,它计算一个成员的单位,并且只显示该成员通过6个单位的行。(因此,6个单位之后的所有内容都将根据日期进行提取)。会员每月只能购买6件。如何提取成员超过6个单位的唯一日志 where子句中的单位在传递第6个数量后不会提取最近的行 Select * from LogTable where [item] in ('Candy','drinks','meat') and [units] > 6 ; 您可以使用以下选项: SELECT SUM(Units), Member F

我想运行一个pull,它计算一个成员的单位,并且只显示该成员通过6个单位的行。(因此,6个单位之后的所有内容都将根据日期进行提取)。会员每月只能购买6件。如何提取成员超过6个单位的唯一日志

where子句中的单位在传递第6个数量后不会提取最近的行

Select *
from LogTable where [item] in ('Candy','drinks','meat')
and [units] > 6  ;

您可以使用以下选项:

SELECT SUM(Units), Member FROM LogTable WHERE [item] in ('Candy','drinks','meat')
GROUP BY Member
HAVING SUM(Units)>6
请尝试以下操作:

    SELECT
        *
    FROM(
    SELECT
        Member,
        MONTH(Date) AS 'Month',
        SUM(UNITS) AS 'SUM'
    FROM LogTable
    WHERE in ('Candy','drinks','meat') 
    GROUP BY 
        Member,
        MONTH(Date) AS 'Month')z
    WHERE SUM > 6

好的,我在评论中谈到:

WITH x AS(
  SELECT 
    lt.*,
    SUM(lt.[units]) OVER(PARTITION BY lt.[member], YEAR(lt.[date]), MONTH(lt.[date]) ORDER BY lt.[date] ROWS UNBOUNDED PRECEDING) as rolling_total
  FROM LogTable lt 
  WHERE lt.[item] in ('Candy','drinks','meat')
)

SELECT * FROM x WHERE rolling_total > 6;
前面的ROWS UNBOUNDED是SUM OVER具有ORDER BY时的默认操作,但我发现它有助于提醒您如何更改它或在其他地方使用它来进行其他操作。full子句实际上是无界前一行和当前行之间的
-您可以想象,如果您想要滑动窗口,您可以使用其他规格,例如,前N次行程中的购买数量不包括当前。。(前3行和前1行之间的行)


注意,我不太清楚每个成员是6个单位的任何东西还是6个单位的糖果,还有6个单位的emat等等。如果是每种食物类型,您也必须将
[项目]
添加到分区中

组,并按成员和月份对单位进行求和,将其连接回同一个表以获取其余数据。在您了解了它是如何工作的之后,请查看(按成员、年(日期)、月(日期)划分的)和(单位)。。然后升级OVER子句,在其前面添加一个无限制的
ORDER BY date)行
,以获得每笔交易的滚动总计花费,并在滚动总计上查找那些大于6的行OK立即处理此问题