Home > Net >  Select rows with same customer id but different transaction id in the same table?
Select rows with same customer id but different transaction id in the same table?

Time:09-03

Every single item sold will come to a new row with date, transaction id, customer id, product name and quantity. I want to find out customers who have made at least 2 separate transactions in August.

Thanks a lot!

Table:

Date transaction_id customer_id product_name qty
2022-08-05 10:44:59.000 5-123 888 A 1
2022-08-05 10:44:59.000 5-123 888 A 1
2022-08-05 18:32:22.000 5-179 174 ZZ 1
2022-08-06 10:32:22.000 6-264 223 QA 1
2022-08-06 10:32:52.000 6-264 223 QB 1
2022-08-06 12:57:12.000 6-365 379 A 1
2022-08-07 20:16:38.000 7-974 888 V 1
2022-08-08 17:48:11.000 8-276 732 R 1
2022-08-09 13:29:43.000 9-390 623 G 1
2022-08-10 09:33:57.000 10-862 623 TT 1
2022-08-11 16:23:31.000 11-348 623 XD 1

Expected result:

Date transaction_id customer_id product_name qty
2022-08-05 10:44:59.000 5-123 888 A 1
2022-08-05 10:44:59.000 5-123 888 A 1
2022-08-07 20:16:38.000 7-974 888 V 1
2022-08-09 13:29:43.000 9-390 623 G 1
2022-08-10 09:33:57.000 10-862 623 TT 1
2022-08-11 16:23:31.000 11-348 623 XD 1

CodePudding user response:

You may use Exists with correlated subquery as the following:

Select T.Date_, T.transaction_id, T.customer_id, T.product_name, T.qty
From table_name T
Where Exists(Select 1 From table_name D 
             Where D.customer_id = T.customer_id And
                   D.transaction_id <> T.transaction_id
             )
And T.Date_ Between '2022-08-01 00:00:00' And '2022-08-31 00:00:00'

See a demo from db<>fiddle.

CodePudding user response:

If you just want to get the only customer_id whose made more than on transaction, use the below query

SELECT COUNT(*),CUSTOMER_ID FROM TRANSACTION 
WHERE DATE between "2022-08-01" AND "2022-08-31" group by 
TRANSACTION_ID HAVING COUNT(*)>=2

If you want to fetch more detailed data then use the below query.

SELECT DATE,TRANSACTION_ID,CUSTOMER_ID,PRODUCT_NAME FROM TRANSACTION 
WHERE DATE between "2022-08-01" AND "2022-08-31" 
group by TRANSACTION_ID ORDER BY CUSTOMER_ID
  •  Tags:  
  • sql
  • Related