首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何实现自定义SQL聚合或比较器函数?

如何实现自定义SQL聚合或比较器函数?
EN

Stack Overflow用户
提问于 2015-09-12 06:06:30
回答 1查看 307关注 0票数 -1

给定下表,我需要生成一个结果,显示所选范围的可用性。可用性规则规定了X,?,'',Y的顺序。例如,给定以下数据集:

代码语言:javascript
复制
+------------+--------------+------+
| date       | availability | id   |
+------------+--------------+------+
| 2015-09-01 | X            |    1 |
| 2015-09-02 | X            |    1 |
| 2015-09-03 | X            |    1 |
| 2015-09-04 | X            |    1 |
| 2015-09-01 | X            |    2 |
| 2015-09-02 | ?            |    2 |
| 2015-09-03 | X            |    2 |
| 2015-09-04 | X            |    2 |
| 2015-09-01 | ''           |    3 |
| 2015-09-02 | Y            |    3 |
| 2015-09-03 | Y            |    3 |
| 2015-09-04 | Y            |    4 |
| 2015-09-01 | Y            |    4 |
| 2015-09-02 | Y            |    4 |
| 2015-09-03 | Y            |    4 |
| 2015-09-04 | Y            |    4 |
+------------+--------------+------+

我想要的输出是:

代码语言:javascript
复制
+--------------+------+
| availability | id   |
+--------------+------+
| X            |    1 |
| ?            |    2 |
| ''           |    3 |
| Y            |    4 |
+--------------+------+

我知道如果我在处理数值,我可能会使用MIN MAX等等。我的问题是,SQL是否给了我一种简单的方法来定义自定义聚合或比较器函数来实现这种逻辑?

如果不同的供应商对此有不同的解决方案,我将使用Azure SQL。

EN

回答 1

Stack Overflow用户

发布于 2015-09-12 06:15:51

只需使用优先级逻辑:

代码语言:javascript
复制
select ids.id, a.availability
from (select distinct id from table t) ids cross apply
     (select top 1 availability
      from table t2
      where t2.id = t.id
      order by (case when availability = 'X' then 1
                     when availability = '?' then 2
                     when availability = '' then 3
                     when availability = 'Y' then 4
                     else 5
                end)
     ) a;

如果您有一个单独的ids表,则应该使用该表而不是子查询。

还有其他方法;但是,我能想到的方法需要更复杂的case语句、两个连接或更复杂的SQL语句。您不需要“自定义聚合”。你只需要弄清楚如何对结果进行优先排序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32532811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档