sql - 将日期的 Min-Max 值返回到具有条件的一列中
问题描述
我有如下所示的数据:
ID_DATA | DATE
--------------------
1101 | 2020-02-01
1101 | 2020-02-02
1101 | 2020-02-03
1102 | 2020-02-01
1102 | 2020-02-01
我想要的是,在类似的 ID_DATA下,会有一列将连接的日期范围显示为字符串' MIN(date) - MAX(date) '。但是如果在相似的ID_DATA下日期相似,它只会按原样显示DATE。
请注意,单个ID_DATA的DATE可能超过 2 行。我希望使用 case-when。
以下预期结果:
ID_DATA DATE
1101 2020-02-01 - 2020-02-03
1102 2020-02-01
解决方案
试试这个选项:
SELECT
ID_DATA,
CONVERT(varchar, MIN(DATE), 111) +
CASE WHEN MIN(DATE) < MAX(DATE)
THEN ' - ' + CONVERT(varchar, MAX(DATE), 111)
ELSE '' END AS DATE
FROM yourTable
GROUP BY
ID_DATA;
这里的逻辑是使用CASE
表达式来检查 ID 的最小日期是否小于最大日期。如果是这样,那么我们显示上限,否则我们只报告最小日期。
推荐阅读
- apache-nifi - 带有 Google Flatbuffers 有效负载的 Websocket 流的 Apache NiFi
- jsp - Java 8,JSP - 应该将 Optional 对象放在 request.setAttribute() 或 session.setAttribute() 中吗?
- sql - Why SQL query with SHA2_256 returns NULL in WHERE clause
- coinbase-api - 开发者可以控制他们的私钥吗?
- powershell - Get-ADObject 的两行标题 | 导出-CSV?
- azure - 无法使用 Azure 函数核心工具在本地运行 cosmosDB 触发器
- php - Validating the key in the data in Lumen
- ruby - 尝试使用 RVM 安装 Ruby 时运行“__rvm_make -j8”时出错
- wordpress - Wordpress Flex 滑块移动布局
- xaml - 显示食物名称的应用程序