如何在相同的结果中获得总和和最新活动?

Hin*_*man 4 sql-server sql-server-2017

Table_1
Name   |   Activity  | LogTime
A      |    0        | 2018-12-17 10:16:04.877 
A      |    1        | 2018-12-15 10:16:04.877
A      |    0        | 2018-12-16 10:16:04.877
A      |    0        | 2018-12-10 10:16:04.877
A      |    0        | 2018-12-10 10:10:04.877
B      |    1        | 2018-12-16 10:16:04.877
B      |    0        | 2018-12-17 10:16:04.877
C      |    1        | 2018-12-14 10:16:04.877
C      |    1        | 2018-12-12 10:16:04.877
C      |    1        | 2018-12-18 10:16:04.877
Run Code Online (Sandbox Code Playgroud)

想要的结果

Name |   TOTALActivity_0  | TOTALActivity_1  |  LatestActivity_0_Logtime  | LatestActivity_1_Logtime
A    |      4             |     1            |  2018-12-17 10:16:04.877   |  2018-12-15 10:16:04.877
B    |      1             |     1            |  2018-12-17 10:16:04.877   |  2018-12-16 10:16:04.877
C    |      0             |     3            |  NULL                      |  2018-12-18 10:16:04.877 
Run Code Online (Sandbox Code Playgroud)

我能够得到如下结果

Name |   TOTALActivity_0  | TOTALActivity_1
A    |      4             |     1          
B    |      1             |     1          
C    |      0             |     3   
Run Code Online (Sandbox Code Playgroud)

使用以下查询

SELECT 
  NAME, 
  SUM(CASE WHEN Activity = 0 THEN 1 ELSE 0 END) TOTALActivity_0,
  SUM(CASE WHEN Activity = 1 THEN 1 ELSE 0 END) TOTALActivity_1
 FROM Table_1
 GROUP BY NAME
Run Code Online (Sandbox Code Playgroud)

如果我尝试如下

 SELECT 
  NAME, 
  SUM(CASE WHEN Activity = 0 THEN 1 ELSE 0 END) TOTALActivity_0,
  SUM(CASE WHEN Activity = 1 THEN 1 ELSE 0 END) TOTALActivity_1,
  CASE WHEN Activity = 0 THEN LogTime ELSE NULL END AS LatestActivity_0_Logtime,
  CASE WHEN Activity = 1 THEN LogTime ELSE NULL END AS LatestActivity_1_Logtime
 FROM Table_1
 GROUP BY NAME,Activity,LogTime
Run Code Online (Sandbox Code Playgroud)

然后它给出 Single-single 和冗余记录。然后我再次尝试使用以下查询

 SELECT 
  NAME, 
  SUM(CASE WHEN Activity = 0 THEN 1 ELSE 0 END) TOTALActivity_0,
  SUM(CASE WHEN Activity = 1 THEN 1 ELSE 0 END) TOTALActivity_1,
  NULL AS LatestActivity_0_Logtime,
  NULL AS LatestActivity_1_Logtime
 FROM Table_1
 GROUP BY NAME
 UNION
 SELECT NULL,NULL,NULL,CASE WHEN Activity = 0 THEN LogTime ELSE NULL END AS LatestActivity_0_Logtime,
  CASE WHEN Activity = 1 THEN LogTime ELSE NULL END AS LatestActivity_1_Logtime
  FROM Table_1
Run Code Online (Sandbox Code Playgroud)

然后结果再次不受欢迎,如下所示

Name |   TOTALActivity_0  | TOTALActivity_1  |  LatestActivity_0_Logtime  | LatestActivity_1_Logtime
A    |      4             |     1            |  NULL                      |  NULL
B    |      1             |     1            |  NULL                      |  NULL
B    |      1             |     3            |  NULL                      |  NULL  
NULL |     NULL           |   NULL           |  2018-12-17 10:16:04.877   |  2018-12-15 10:16:04.877
NULL |     NULL           |   NULL           |  2018-12-16 10:16:04.877   |  2018-12-16 10:16:04.877
NULL |     NULL           |   NULL           |  2018-12-10 10:16:04.877   |  2018-12-18 10:16:04.877   
NULL |     NULL           |   NULL           |  2018-12-10 10:10:04.877   |  2018-12-15 10:16:04.877
NULL |     NULL           |   NULL           |  2018-12-17 10:16:04.877   |  2018-12-16 10:16:04.877
.
.
.
.
.
.
Run Code Online (Sandbox Code Playgroud)

请帮助根据需要获得不同的和合并的结果

ype*_*eᵀᴹ 7

这应该有效:

SELECT 
    Name, 
    COUNT(CASE WHEN Activity = 0 THEN 1 END) AS TOTALActivity_0,
    COUNT(CASE WHEN Activity = 1 THEN 1 END) AS TOTALActivity_1,
    MAX(CASE WHEN Activity = 0 THEN LogTime END) AS LatestActivity_0_Logtime,
    MAX(CASE WHEN Activity = 1 THEN LogTime END) AS LatestActivity_1_Logtime
FROM
    Table_1
GROUP BY
    Name ;
Run Code Online (Sandbox Code Playgroud)

测试:dbfiddle.uk