我有以下查询:
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
谢谢
答案 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设置