如何定义自己的自定义SQL聚合函数?

时间:2015-09-10 02:51:37

标签: sql tsql azure-sql-database aggregate-functions

我想使用GROUP BY并根据我自己的聚合函数选择一个类似于MINMAX等的值。

例如,根据以下数据,如果id中的任何值为X,我希望按GROUP BY分组并获得X可用性,否则返回?如果包含......等等。

+------------+--------------+------+
| date       | availability | id   |
+------------+--------------+------+
| 2015-09-08 | Y            |    1 |
| 2015-09-07 | Y            |    1 |
| 2015-09-06 | X            |    1 |
| 2015-09-05 |              |    1 |
| 2015-09-04 | X            |    1 |
| 2015-09-04 | Y            |    2 |
| 2015-09-05 | Y            |    2 |
| 2015-09-06 | Y            |    2 |
| 2015-09-07 | Y            |    2 |
| 2015-09-08 | Y            |    2 |
| 2015-09-09 | ?            |    2 |
+------------+--------------+------+

SELECT * FROM availability GROUP BY ID [....]

期望的输出:

+------------+--------------+------+
| date       | availability | id   |
+------------+--------------+------+
| 2015-09-08 | X            |    1 |
| 2015-09-04 | ?            |    2 |
+------------+--------------+------+

1 个答案:

答案 0 :(得分:0)

您可以使用条件聚合执行此操作:

select id,
       (case when sum(case when availability = 'X' then 1 else 0 end) > 0
             then 'X'
             else '?'
        end)
from availability a
group by id;

你的问题没有说明日期的来源,所以我把它遗漏了。