tsql - 使用 cte 和变量来更新 SQL 中的日期
问题描述
我目前正在尝试实现一些代码,它将获取给定 160 行行列表的日期,并将它们更新为同一表中另一个日期后一分钟。
所以例如从这些将来自:
> 1058841 2018-06-20 14:15:04.000 Copy of NtO produced
> 1058841 2018-06-14 19:58:03.000 NTO service date set to 24/05/2018
> 969565 2018-06-20 14:15:01.000 17530 Copy of NtO produced
> 969565 2018-06-14 19:58:03.000 148 NTO service date set to 24/05/2018
对此:
> 1058841 2018-06-14 19:59:03.000 Copy of NtO produced
> 1058841 2018-06-14 19:58:03.000 NTO service date set to 24/05/2018
> 969565 2018-06-14 19:59:03.000 17530 Copy of NtO produced
> 969565 2018-06-14 19:58:03.000 148 NTO service date set to 24/05/2018
我到目前为止的代码:
declare @thisdate datetime
set @thisdate = (
select * from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber, te_date, te_system_ref, te_event from ticket_events where te_system_ref in
(select sl_system_ref from statutory_letter where sl_letter_batch = 9429)and te_event = 'Copy of NtO produced'
) t
where rownumber = 1
);
with rn as
( select * from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber1, te_date, te_system_ref, te_event from ticket_events where te_system_ref in
(
select sl_system_ref from statutory_letter where sl_letter_batch = 9429
)
and te_event = 'Copy of NtO produced'
) t where rownumber1 = 1)
select * from rn where te_date between dateadd(hour,1,@thisdate) and dateadd(hour,-1,@thisdate)
这目前给了我错误:
Msg 116, Level 16, State 1, Line 9 当子查询没有用 EXISTS 引入时,只能在选择列表中指定一个表达式。
如果有人能解释我哪里出错了,或者指出我正确的方向,我将不胜感激
解决方案
set @thisdate = (
select * from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber, te_date, te_system_ref, te_event from ticket_events where te_system_ref in
(select sl_system_ref from statutory_letter where sl_letter_batch = 9429)and te_event = 'Copy of NtO produced'
) t
where rownumber = 1
);
在这里,您尝试将几个值分配给一个标量变量。
我猜你实际上想要te_date
.
set @thisdate = (
select te_date from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber, te_date from ticket_events where te_system_ref in
(select sl_system_ref from statutory_letter where sl_letter_batch = 9429)and te_event = 'Copy of NtO produced'
) t
where rownumber = 1
);
推荐阅读
- arangodb - arangodb 无法启动或升级
- android - 外部原生构建问题、构建命令失败、使用参数 {-HF 执行“C:/User/user.../cmake.exe”时出错
- apache-kafka - Kafka Zookeeper 的用途
- android - 如何更新从 ADB android studio 生成的具有相同密钥存储的 APK 的 Play 商店下载的 APK
- node.js - express 和 CORS 的问题
- python-3.x - Splitting HSV mask into multiple rectangles
- go - go中如何使用runtime.Object创建CRD泛型函数
- javascript - 使用捕获的匹配作为键,用正则表达式替换字符串
- elasticsearch - 启动 ELASTICSEARCH 时,Elasticsearch 进程的最大文件描述符 [4096] 太低
- docker - Docker 应用程序中的 GUI