Limiting/Aggregating 选择 ID 后跟 CASE 时的结果

Limiting/Aggregating Results When Selecting on an ID followed by a CASE

正在尝试从日志中提取一些数据 table。

我在下面使用的查询的简化版本:

SELECT
    type_id AS type_id
    , CASE WHEN LogOperation = 'Insert' THEN CreateDT ELSE NULL END AS create_date
    , CASE WHEN (AuditID > 0 OR AuditID IS NOT NULL) AND OldVal_AuditID IS NULL THEN LogTimeStamp ELSE NULL END AS audit_date
FROM TypeLOG
ORDER BY type_id

示例结果集:

|---------|-------------|------------|
| type_id | create_date | audit_date |
|---------|-------------|------------|
| 176     | 2019-06-01  | NULL       |
| 177     | 2019-06-01  | NULL       |
| 177     | NULL        | 2019-06-03 |
| 178     | 2019-06-03  | NULL       |
| 178     | NULL        | 2019-06-04 |
| 178     | NULL        | NULL       |

我如何提取此数据,以便每个 type_id 只显示 1 行?这是一个日志 table,因此更新和删除等其他操作自然会在每个 type_id.

中创建多行

与此相关,理论上每个 type_id 可以有多个 'Inserts'...我想要第一个 'Insert' 每个 type_id,我想基于最早的 LogTimeStamp。

我需要如何修改我的查询以反映这一点?

谢谢!

你必须做 CTE 或自我加入它应该看起来像那样

WITH CTE1 AS (
SELECT TYPE_ID,
       CASE WHEN LogOperation = 'Insert' THEN CreateDT ELSE NULL END AS create_date
FROM TypeLOG
), CTE2 (
SELECT TYPE_ID,
       CASE WHEN (AuditID > 0 OR AuditID IS NOT NULL) AND OldVal_AuditID IS NULL THEN LogTimeStamp ELSE NULL END AS audit_date
FROM TypeLOG
)
    SELECT CTE1.TYPE_ID, CREATE_DATE, AUDIT_DATE
    FROM CTE1 JOIN CTE2 
    ON CTE1.TYPE_ID = CTE2.TYPE_ID
    ORDER BY TYPE_ID