【问题标题】:TSQL select last value by week?TSQL按周选择最后一个值?
【发布时间】:2010-08-06 01:47:27
【问题描述】:

我有以下疑问:

选择 row_ID,
        价值,
        添加日期
FROM dbo. 报告
WHERE salesman_ID = @salesman_ID
        AND row_ID IN (SELECT MAX(row_ID)
                        FROM dbo. 报告
                        WHERE salesman_ID = @salesman_ID
                        分组依据(添加日期))
ORDER BY date_added ASC

这会选择给定用户每天输入的最后一个值(date_added 列不包含时间值,并且行 ID 是自动编号的)。查询有效,但我想做的是选择为给定 日历周 而不是给定日期输入的最后一个值。

例如,这是当前查询返回的内容:

行 ID |价值 |添加日期 1 | 25 | 7-5-2010 2 | 50 | 2010 年 7 月 7 日 5 | 40 | 2010 年 7 月 15 日 9 | 55 | 2010 年 7 月 16 日 11 | 60 | 2010 年 7 月 27 日

这是我希望它返回的内容:

价值 | week_of 50 | 2010 年 7 月 4 日 55 | 2010 年 7 月 11 日 60 | 2010 年 7 月 22 日

有什么想法吗?

【问题讨论】:

  • 日历周对您来说是怎样的?每周开始是区域性的 - 有些是星期天,有些是星期一......
  • 抱歉,我应该指定 - 星期日。

标签: tsql


【解决方案1】:

我想如果你用

替换原来的 GROUP BY 子句
GROUP BY (DATEPART(WEEK,date_added))

你应该得到你想要的。

【讨论】:

    【解决方案2】:

    这将为您提供当天所在周的第一天和最后一天

    DECLARE @d DATETIME
    SET @d = '20100805'
    
    SELECT
    
        @d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 AS FirstDayOfWeek,
        @d - DATEDIFF(dd, @@DATEFIRST - 1, @d) % 7 + 6 AS LastDayOfWeek
    

    只需将其合并到您的子查询中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 2013-08-22
      • 2018-09-19
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多