【问题标题】:How to build SQL query for this following scenario?如何为以下场景构建 SQL 查询?
【发布时间】:2015-04-28 03:00:29
【问题描述】:

我有一个如下所示的表格:

Name    Post       Like Share   Comment Date
--------------------------------------------
Sita    test data 1 5   2   4   28/4/2015
Munni   test data 2 5   2   5   27/4/2015
Shila   test data 3 1   3   1   22/4/2015
Ram     Test data 4 5   0   5   1/4/2015
Sam     Test data 5 4   0   2   2/4/2015
Jadu    Test data 6 1   5   2   30/3/2015
Madhu   Test data 7 5   0   4   10/4/2015

现在我想要这样的结果集:

Type            Name      Post      Like  Share Comment Date
-------------------------------------------------------------------------
Today           Sita    test data 1    5    2   4       28/4/2015
Last 7 Days     Sita    test data 1    5    2   4       28/4/2015
Last 7 Days     Munni   test data 2    5    2   5       27/4/2015
Last 7 Days     Shila   test data 3    1    3   1       22/4/2015
Last 30 Days    Sita    test data 1    5    2   4       28/4/2015
Last 30 Days    Munni   test data 2    5    2   5       27/4/2015
Last 30 Days    Shila   test data 3    1    3   1       22/4/2015
Last 30 Days    Ram     Test data 4    5    0   5       1/4/2015
Last 30 Days    Sam     Test data 5    4    0   2       2/4/2015
Last 30 Days    Jadu    Test data 6    1    5   2       30/3/2015
Last 30 Days    Madhu   Test data 7    5    0   4       10/4/2015

今天必须只有今天的帖子。过去 7 天必须有今天的帖子 + 过去 7 天的帖子。过去 30 天列必须包含过去 30 天的所有帖子。

【问题讨论】:

  • 看看使用union allwhere 子句...
  • 你能提供完整的查询吗?请

标签: sql sql-server-2008 date


【解决方案1】:

使用不同案例语句的几个联合来获取日期范围会起作用。

【讨论】:

  • 我正在使用以下查询来追踪日期 .... SELECT tblWatchList.UserName, tblPost.Post, tblPost.Time FROM tblPost INNER JOIN tblProfile ON (tblProfile.ID=tblPost.UID) INNER加入 tblWatchList ON (tblWatchList.ID=tblProfile.UID) WHERE dbo.tblPost.Time BETWEEN (SELECT CONVERT(VARCHAR(10),DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), -44),120)) AND GETDATE() ORDER BY FBDB.dbo.tblPost.Time ASC
【解决方案2】:

使用union alldateadd

select 'Today' as Type, Name, Post, [Like], Share, Comment, [Date]
from yourtable
where [Date] = getdate()
union all 
select 'Last 7 Days' as Type, Name, Post, [Like], Share, Comment, [Date]
from yourtable
where [Date] >= DateAdd(day,-7,getdate())
union all 
select 'Last 30 Days' as Type, Name, Post, [Like], Share, Comment, [Date]
from yourtable
where [Date] >= DateAdd(day,-30,getdate())

顺便说一句,列名的选择很糟糕(不要使用保留字)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2013-07-09
    • 2014-10-23
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多