Sql 当某一事件在某一天发生不止一次时,查找详细信息
我有一个简单的表来存储客户的交易。该表包含作为主键的交易id、客户编号、交易日期和项目id 我需要知道任何客户在给定的一天购买了超过1个不同的商品id 因此,在下表中,我只想获得客户BBB的所有记录,因为他们在同一天有两个不同的项目ID。所有AAA都是相同的itemid,CCC跨越了两个不同的日期 +---------+------------+------------+--------+ | TransId | CustomerId | Date | ItemId | +---------+------------+------------+--------+ | 1 | AAA | 24/11/2020 | 11 | | 2 | AAA | 24/11/2020 | 11 | | 3 | AAA | 24/11/2020 | 11 | | 4 | BBB | 23/11/2020 | 12 | | 5 | BBB | 23/11/2020 | 11 | | 6 | CCC | 23/11/2020 | 11 | | 7 | CCC | 24/11/2020 | 11 | +---------+------------+------------+--------+ 使用countdistinct itemid并从group by子句中删除项字段Sql 当某一事件在某一天发生不止一次时,查找详细信息,sql,sql-server,Sql,Sql Server,我有一个简单的表来存储客户的交易。该表包含作为主键的交易id、客户编号、交易日期和项目id 我需要知道任何客户在给定的一天购买了超过1个不同的商品id 因此,在下表中,我只想获得客户BBB的所有记录,因为他们在同一天有两个不同的项目ID。所有AAA都是相同的itemid,CCC跨越了两个不同的日期 +---------+------------+------------+--------+ | TransId | CustomerId | Date | ItemId | +-----
如果希望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
从分组中删除项。我假设您希望itemid成为结果的一部分,对吗?
Select customerid, date from transactions
group by customerid, date
having count(distinct itemid) > 1
;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
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