如何在SQL中获得去年的截止日期和日期?

问题描述 投票:1回答:1

我想比较当年的WTD和MTD与去年的WTD和MTD。我去年怎样到达WTD和MTD?]

示例:如果当前WTD为06-04-2020至08-04-2020,那么我必须比较去年同期(如06-04-2019至08-04-2019)。同样的方式,MTD也需要进行比较。像下面给出的。我需要检查所有WTD数据,而无需提供日期和日期。

enter image description here

有任何帮助吗?

sql sql-server sql-server-2008-r2
1个回答
0
投票

这里是一个示例查询,使用dateadd将当前期间与上一年的相同期间进行比较:

select
    count(case when sale_dt >= dateadd(y,-1,'20200406') and sale_dt < dateadd(y,-1,'20200413') then sale_dt end) prev_year_week 
  , count(case when sale_dt >= '20200406' and sale_dt < '20200413' then sale_dt end) this_year_week
from Mytable
where sale_dt >= '20200406' and sale_dt < '20200413'
or sale_dt >= dateadd(y,-1,'20200406') and sale_dt < dateadd(y,-1,'20200413')

这里有一些示例数据:

CREATE TABLE [myTable] (
    [myTableID] INTEGER NOT NULL IDENTITY(1, 1),
    [sale_dt] datetime,
    [name] VARCHAR(255) NULL,
    PRIMARY KEY ([myTableID])
);

INSERT INTO myTable([sale_dt],[name]) VALUES('2019-03-26 10:46:33','Oleg'),('2019-03-16 13:50:51','Brett'),('2019-04-05 19:35:43','Lester'),('2019-04-04 19:50:00','Kamal'),('2019-04-07 14:31:08','Finn'),('2019-03-04 22:54:04','Lewis'),('2019-03-27 10:54:45','Paki'),('2019-04-09 01:42:52','Louis'),('2019-04-10 11:19:24','Howard'),('2019-03-16 08:48:36','Felix');
INSERT INTO myTable([sale_dt],[name]) VALUES('2019-04-08 06:25:04','Addison'),('2019-04-04 09:10:06','Armando'),('2019-03-03 23:18:07','Dylan'),('2019-04-16 04:24:12','Austin'),('2019-03-19 13:46:05','Beau'),('2019-03-19 11:31:25','Boris'),('2019-04-19 09:20:29','Berk'),('2019-03-26 17:01:23','Kasper'),('2019-03-23 05:01:06','Hamilton'),('2019-04-06 17:23:07','Channing');
INSERT INTO myTable([sale_dt],[name]) VALUES('2019-03-14 08:38:33','Nasim'),('2019-04-06 12:42:27','Randall'),('2019-03-31 23:33:57','Kasimir'),('2019-04-07 22:11:27','Aquila'),('2019-04-15 21:06:57','Zeph'),('2019-03-12 08:00:01','Salvador'),('2019-04-19 19:12:09','Knox'),('2019-04-04 01:28:42','Chaim'),('2019-03-06 13:40:22','Orlando'),('2019-03-03 19:04:59','Quinlan');
INSERT INTO myTable([sale_dt],[name]) VALUES('2019-04-09 05:06:31','Jin'),('2019-03-03 18:32:56','Nero'),('2019-03-08 17:51:44','Linus'),('2019-04-17 17:40:56','Levi'),('2019-03-13 08:30:53','Dieter'),('2019-03-29 03:42:42','Nehru'),('2019-03-15 17:53:09','Harlan'),('2019-04-13 04:45:21','Ralph'),('2019-03-07 04:21:01','Tobias'),('2019-04-02 19:32:57','Derek');

INSERT INTO myTable([sale_dt],[name]) VALUES('2020-04-04 15:58:48','Holmes'),('2020-04-04 02:49:20','Len'),('2020-04-05 19:56:04','Yasir'),('2020-04-12 09:43:57','Quamar'),('2020-04-12 14:14:29','Dante'),('2020-04-11 08:04:20','Baxter'),('2020-03-31 22:30:12','Odysseus'),('2020-04-03 11:54:33','Levi'),('2020-04-10 21:36:42','Brian'),('2020-04-07 00:18:22','Sawyer');
INSERT INTO myTable([sale_dt],[name]) VALUES('2020-04-08 15:42:30','Hunter'),('2020-04-06 17:50:25','Kenyon'),('2020-03-27 03:20:14','Axel'),('2020-03-31 19:54:39','Trevor'),('2020-03-27 09:10:22','Griffin'),('2020-04-05 18:32:54','Gavin'),('2020-04-09 17:46:47','Oliver'),('2020-04-09 13:52:08','Nasim'),('2020-04-03 09:44:41','Zeus'),('2020-04-01 07:09:49','Kirk');
INSERT INTO myTable([sale_dt],[name]) VALUES('2020-04-01 20:02:11','Benjamin'),('2020-04-06 08:10:22','Rooney'),('2020-04-09 20:56:28','Hunter'),('2020-03-31 09:32:44','Jared'),('2020-04-01 22:20:06','Caesar'),('2020-03-27 18:33:16','Rooney'),('2020-04-12 02:37:09','Brock'),('2020-03-28 12:04:46','Channing'),('2020-04-12 23:41:21','Amery'),('2020-03-25 22:41:15','Brent');

对数据进行上面的查询会导致:

prev_year_week  this_year_week
11              13

但是请注意,2020-04-06(星期一)和2019-04-06(星期六)的星期几不相同。

© www.soinside.com 2019 - 2024. All rights reserved.