【问题标题】:How to arrive Last Year Week to Date and Month to Date in SQL?如何在 SQL 中到达去年的一周至今和本月至今?
【发布时间】:2020-07-21 15:28:54
【问题描述】:

我想将当年的 WTD 和 MTD 与去年的 WTD 和 MTD 进行比较。我如何才能到达去年 WTD 和 MTD?。

示例: 如果当前年份 WTD 是 06-04-2020 到 08-04-2020,那么我必须比较去年同期,例如 06-04-2019 到 08-04-2019。同样的方式MTD也进行了比较。如下所示。我需要检查任何 WTD 数据,但不提供日期和日期。

有人帮忙吗?

【问题讨论】:

  • 标记您正在使用的 DBMS。
  • 嗨,Yogesh。这是我的第一篇文章。我添加了标签。对吗?
  • 您希望如何比较。使用示例数据和所需结果编辑问题会有所帮助。
  • 您应该提供样本数据和所需的结果,以便清楚您所说的“比较”之类的词是什么意思。
  • 我加了戈登。

标签: sql sql-server sql-server-2008-r2


【解决方案1】:

这是一个使用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 年 4 月 6 日(星期一)和 2019 年 4 月 6 日(星期六)的星期几是不同的。

见:https://rextester.com/LMRC80411 数据生成者:https://www.generatedata.com/

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2020-01-19
    • 1970-01-01
    • 2018-04-25
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多