【问题标题】:Find details when an event happens more than once on a given day当事件在某一天发生多次时查找详细信息
【发布时间】:2020-11-25 05:23:56
【问题描述】:

我有一个简单的表来存储客户的交易。该表包含作为其主键的交易 ID、客户编号、交易日期和商品 ID。

我需要知道任何客户在某一天购买了超过 1 个不同的商品 ID。

所以在下表中,我希望只为客户 BBB 取回所有记录,因为他们在同一天有 2 个不同的项目 ID。所有 AAA 的 itemid 相同,而 CCC 则跨越 2 个不同的日子。

+---------+------------+------------+--------+ |转号 |客户 ID |日期 |项目 ID | +---------+------------+------------+--------+ | 1 | AAA | 2020 年 11 月 24 日 | 11 | | 2 | AAA | 2020 年 11 月 24 日 | 11 | | 3 | AAA | 2020 年 11 月 24 日 | 11 | | 4 |血脑屏障 | 2020 年 11 月 23 日 | 12 | | 5 |血脑屏障 | 2020 年 11 月 23 日 | 11 | | 6 | CCC | 2020 年 11 月 23 日 | 11 | | 7 | CCC | 2020 年 11 月 24 日 | 11 | +---------+------------+------------+--------+

我已经尝试过了,但它似乎返回了所有行...

select customerid, date, itemid
from transactions
group by customerid, date, itemid
having count(itemid) > 1

【问题讨论】:

  • 从分组中删除项目。
  • 我假设您希望 itemid 成为结果的一部分,对吧?

标签: sql sql-server


【解决方案1】:

使用count(distinct itemid) 并从group by clause 中删除the item field

Select customerid, date from transactions 
group by customerid, date
having count(distinct itemid) > 1

【讨论】:

    【解决方案2】:
    ;WITH CTE AS (
    SELECT *
    ,ROW_NUMBER() OVER(PARTITION BY  CUSTOMERID,DATE ORDER BY TEMID) AS RUN
    FROM (
    SELECT DISTINCT CUSTOMERID,DATE,TEMID 
    from transactions) a)
    SELECT B.CustomerId,B.Date,B.temId FROM CTE B inner join (
    SELECT DISTINCT CUSTOMERid,DATE FROM CTE WHERE RUN > 1)C
    ON B.CustomerId=C.CustomerId AND B.Date = C.Date
    

    【讨论】:

      【解决方案3】:

      如果您希望 itemid 成为结果的一部分,这应该可以:

      SELECT t.CustomerId, t.ItemId, t.Date
      FROM(
           SELECT CustomerId, ItemId, COUNT(itemid) AS Trans
           FROM transactions
           GROUP BY CustomerId, ItemId
      ) AS a
      JOIN transactions t
          ON t.CustomerId = a.CustomerId
          AND t.ItemId <> a.ItemId
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 2015-11-02
        相关资源
        最近更新 更多