根据重复项选择多个字段,并查找列的最大值

时间:2017-12-16 00:10:48

标签: sql-server

我正在使用SQL Server 2016,我遇到了多个col分组问题,并在省略重复行时找到了平均值。我有一个事务表定义为:

CREATE TABLE [dbo].[CUST_TRANSACTION]
( 
     [EXTRACT_DATE] [date] NULL,
     [CUSTOMER_ID] [bigint] NULL,   
     [TRANS_NUMBER] [bigint] NULL,
     [CATEGORY] [smallint] NULL,    
     [RANKING] [smallint] NULL 
)

一些示例数据:

EXTRACT_DATE    CUSTOMER_ID TRANS_NUMBER    CATEGORY    RANKING
---------------------------------------------------------------
2017-10-31          10001   1000101           4          100
2017-10-31          10001   1000102           4          100
2017-10-31          10001   1000105           4            0
2017-10-31          10001   1000106           4            0
2017-10-31          10002   1000201           4          200
2017-10-31          10001   1000103           5          100
2017-10-31          10001   1000107           5            0
2017-10-31          10003   1000301           5          300
2017-10-31          10003   1000302           5          300
2017-10-31          10004   1000401           7          500
2017-11-30          10004   1000403           7          300
2017-10-31          10001   1000104           8          100
2017-10-31          10004   1000402           8            0
2017-10-31          10003   1000303           8          300

请求是查找给定EXTRACT_DATE内的所有customer_id,并使用RANKING> 1存在于多个CATEGORY中。然后找到CUSTOMER_ID和CUSTOMER_ID EXISTS中的最高CATEGORY,最后找到CUSTOMER_ID EXISTS IN中的CATEGORIES数

输出应仅包含以下两行:

    10001             8        3  
    10003             8        2  
  • CUSTOMER_ID 10001属于CATEGORY(4,5& 8)
  • CUSTOMER_ID 10003属于CATEGORY(5& 8)

这是我到目前为止的SQL:

SELECT
    MAX(CATEGORY), CUSTOMER_ID, 
    COUNT(CUSTOMER_ID) "Customer_id count"
FROM
    CUST_TRANSACTION
WHERE
    EXTRACT_DATE = CONVERT(datetime, '2017-10-31')
    AND ranking > 1
GROUP BY
    CUSTOMER_ID, CATEGORY
HAVING
    COUNT(CUSTOMER_ID) > 1

输出:

CATEGORY    CUSTOMER_ID Customer_id count 
----------------------------------------
4                10001     2
5                10003     2

我正在获得正确的CUSTOMER_ID,但不是最大类别或CUSTOMER_ID所在的数字类别的正确计数。任何建议都会很棒。

由于

1 个答案:

答案 0 :(得分:0)

尝试使用脚本

select MAX(CATEGORY), CUSTOMER_ID, count(CUSTOMER_ID) "Customer_id count"
from
(select distinct CUSTOMER_ID, CATEGORY
from CUST_TRANSACTION
where EXTRACT_DATE = Convert(datetime, '2017-10-31' )
and ranking > 1
)
group by CUSTOMER_ID
having count(CUSTOMER_ID) > 1
相关问题