持续6周

时间:2018-07-12 15:06:49

标签: sql-server

我有以下查询:

SELECT distinct sending_organisation AS [Supplier], t1.date, COUNT(Status) AS [Transactions], Month(t1.Date) SO_Month, Year(t1.date) SO_Year
 FROM TX
   CROSS APPLY ( VALUES (CONCAT(left(DATENAME(mm, Date_Reported),3),' ',
                             DATENAME(yyyy, Date_Reported)),
                      DATEPART(mm, Date_Reported)
                     )
            ) t1 (Date, Morder)

Where Status not in ('defect')
 and Date >= DATEADD(MONTH, -6, CAST(GETDATE() AS DATE))
    GROUP BY t1.date, t1.Morder, sending_organisation
ORDER BY sending_organisation, date DESC

这给了我一张表格,其中包含所有供应商以及特定月份和年份的交易。它提供了我最近6个月的数据(即2018年2月至2018年7月)。但是,如何调整此查询以获取最近的6周呢?

说实话,理想的SQL会给我最近6周的日期,以w / c表示,日期是MONDAY,而星期几是星期日。因此,如果我查看从今天起过去6周的数据,这些列将类似于

4/06/18 | 11/06/18 | 18/06/18 | 25/06/18 | 02/07/18 | 09/07/18

谢谢

2 个答案:

答案 0 :(得分:1)

DATEADD函数的第一个参数是 datepart ,您可以将其从MONTH更改为WEEK,以获取最近的6周而不是最近6个月。

关于获取每周的星期一,根据您理想的SQL,您可以使用以下方法:

dateadd(day, -1 * (datepart(weekday, Date_Reported) - 2), Date_Reported)

weekday日期部分返回一个1到7的整数,星期日为1,因此您只需减去Date_Reported的工作日值(减去2即可调整为星期一)即可得出星期几。日期报告的。

答案 1 :(得分:1)

尝试一下,让我知道

employee_role_join = with_polymorphic(EmployeeBase, 
    [Engineer, Analyst])
results = db.session.query(employee_role_join).filter(or_(
    Engineer.role.name.ilike('%petroleum%'),
    Analyst.role.name.ilike('%petroleum%')))

-我的系统从星期天开始给我-可以解决这个问题,这取决于您的SQL设置