Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当某一事件在某一天发生不止一次时,查找详细信息_Sql_Sql Server - Fatal编程技术网

Sql 当某一事件在某一天发生不止一次时,查找详细信息

Sql 当某一事件在某一天发生不止一次时,查找详细信息,sql,sql-server,Sql,Sql Server,我有一个简单的表来存储客户的交易。该表包含作为主键的交易id、客户编号、交易日期和项目id 我需要知道任何客户在给定的一天购买了超过1个不同的商品id 因此,在下表中,我只想获得客户BBB的所有记录,因为他们在同一天有两个不同的项目ID。所有AAA都是相同的itemid,CCC跨越了两个不同的日期 +---------+------------+------------+--------+ | TransId | CustomerId | Date | ItemId | +-----

我有一个简单的表来存储客户的交易。该表包含作为主键的交易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子句中删除项字段


如果希望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