[英]MSSQL - Date Range
表格1
event1:事件 1 名稱
event1_date:事件日期
表2
event2:事件 2 名稱
event2_date:事件日期
event1:事件 1 名稱
我嘗試了幾種在線找到的語法,但都沒有提供我所需要的。 用外行的話來說,這就是我需要的:
如果表 2 中的事件發生在表 1 中任何事件的 7 天內,則在事件 1 字段中添加事件名稱。
編輯評論:
我試過什么,為什么它不起作用? 我一直試圖讓它工作五天。 我不知道我嘗試了多少種不同的語法。 今天凌晨 3 點,我有點憤怒地刪除了所有筆記,因此我無法提供我嘗試過的內容的列表。
下面提供了小樣本表。
表格1
事件1 | event1_date |
---|---|
活動一 | 1/1/2020 |
活動二 | 1/15/2020 |
活動三 | 2/1/2020 |
活動四 | 2/20/2020 |
表2
事件2 | event2_date | 事件1 |
---|---|---|
事件 2.1 | 1/10/2020 | |
事件 2.2 | 1/11/2020 | |
事件 2.3 | 1/16/2020 | 活動二 |
事件 2.4 | 2/25/2020 | 活動四 |
表 1 中事件發生前 7 天和/或未來 7 天?
表 2 事件 2 列中的點符號 - 如果在該時間范圍內有多個事件(另一行,或在表 2 事件 1 列中構建事件列表?
**目前不在 SQL 框中......但這可能會有所幫助
SET NOCOUNT ON;
DECLARE @event2_date datetime
DECLARE @outtext nvarchar(100)
DECLARE @prior7 datetime
DECLARE @after7 datetime
DECLARE event2_cursor CURSOR FOR SELECT event2_date FROM table2;
OPEN event2_cursor
FETCH NEXT FROM event2_cursor INTO @event2_date
WHILE @@FETCH_STATUS = 0
BEGIN
set @prior7 = dateadd(DD, -7, @event2_date);
set @after7 = dateadd(DD, 7, @event2_date);
set @outtext = select event1_text from table1 where event1_date
BETWEEN @prior7 AND @after7
print @outtext
END
CLOSE event2_cursor;
DEALLOCATE event2_cursor;
這應該可以通過包含子查詢的單個 UPDATE 語句實現。 下面舉例。
注 1:在表 2 中的行之后的 7 天內,表 1 中的行可能不止一行。 我已經通過按日期差異對重復項進行排序並放入第一個來處理此問題。
注 2:如果 x 在 y 之后,則 DATEDIFF(day, x, y) 給出否定結果。 如果您只需要 7 天前或 7 天后的值而不是兩者,則需要將 BETWEEN 子句中的值之一設置為 0。
set dateformat MDY;
create table Table1
(
event1 nvarchar(max),
event1_date date
);
create table Table2
(
event2 nvarchar(max),
event2_date date,
event1 nvarchar(max)
);
insert into
Table1
values
('Event 1', '1/1/2020'),
('Event 2', '1/15/2020'),
('Event 3', '2/1/2020'),
('Event 4', '2/20/2020');
select
*
from
Table1;
insert into
Table2
values
('Event 2.1', '1/10/2020', null),
('Event 2.2', '1/11/2020', null),
('Event 2.3', '1/16/2020', null),
('Event 2.4', '2/25/2020', null);
select
*
from
Table2;
update
Table2
set
event1 = (
select top 1
Table1.event1
from
Table1
WHERE
DATEDIFF(day, Table1.event1_date, Table2.event2_date) between -7 and 7
order by
DATEDIFF(day, Table1.event1_date, Table2.event2_date)
);
select
*
from
Table2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.