sql - 获取 SQL 中最接近的日期作为列
问题描述
我在 SQL 中有一个要求,我必须从日期列表中检查最接近它的日期。例如:从下面的数据我必须检查是否有日期" 2020-03-21"
数据:
name date
abc 2020-03-20
abc 2020-03-21
abc 2020-03-23
def 2020-03-22
def 2020-03-24
预期的:
name date expected
abc 2020-03-20 2020-03-21
abc 2020-03-21 2020-03-21
abc 2020-03-23 2020-03-21
def 2020-03-22 2020-03-22
def 2020-03-24 2020-03-22
根据之前的帖子,使用 orderby datediff 和 rownum,我能够以正确的顺序获取 rownum,但有点卡住,就像如何在名称级别获取最接近的日期一样。
解决方案
您可以为此使用子查询:
select
t.*,
(
select top 1 t1.date
from mytable t1
where t1.name = t.name
order by abs(datediff(d, t1.date, '2020-03-21')), t.date
) expected
from mytable t
子查询在具有相同name
. 如果有联系,则首选“早期”日期。
推荐阅读
- docker - 如何连接到 docker 桌面的主机以查看我的卷
- c# - C# ASP.NET MVC Crystal Report 参数值未传递给报告
- json - 使用jq查询嵌套的json
- c# - LINQ 打印出 sytax 而不是结果
- c# - TabControl 的 BusyIndicator
- php - 更改/更改特定 URL
- c# - 将 Microsoft bot 框架连接到 Ms Teams(未在 Ms Teams 中显示主动消息)
- php - 如果输入表单由 For 循环显示,如何多次插入 Laravel
- java - Android Crashlytics 空指针异常
- xamarin - Azure DevOps 构建 Xamarin.Android 9.4.1.0 作为托管 macOS 映像中的目标