【发布时间】:2017-02-04 06:32:22
【问题描述】:
我有一个包含 3 列(id、type、date)的表格,其值如下:
id type date
--- --- ---
191 0 2016-09-15 11:26:51.000
191 1 2016-09-15 11:30:31.000
200 0 2016-09-15 17:36:19.000
200 1 2016-09-15 18:26:51.000
331 0 2016-09-16 07:26:22.000
这就是我想做的:
对于上面的每个ticketid,选择最短日期的行。完成后,我希望输出中的另一列名为“isEngaged”,如果ticketid 的任何记录都存在type = 1,则该列将设置为1。
我想要的输出:
id type date isEngaged
--- --- --- ---
191 0 2016-09-15 11:26:51.000 1
200 0 2016-09-15 17:36:19.000 1
331 0 2016-09-16 07:26:22.000 0
这是我目前所拥有的:(这会只返回日期最少的行)
SELECT id, type, date FROM (SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY date ASC) AS [Row], id, type, date)
FROM mytable WHERE type IN (0)) WHERE [Row] = 1
真的不知道如何合并 isEngaged 部分。我尝试使用 CASE WHEN 但不确定如何继续:
SELECT id, type, date,
"isEngaged" = CASE WHEN (SELECT * FROM mytable where type in (1) and id = <not sure what to put here>) THEN 1 ELSE 0 END
FROM mytable
如果您知道更好的方法,请告诉我。
【问题讨论】:
标签: sql sql-server tsql greatest-n-per-group