Sql 按日期分组的最简单方法

Sql 按日期分组的最简单方法,sql,Sql,Microsoft SQL: 我有一个数据库查询,它将字符串转换为日期,然后聚合: WEEK(CAST(myDateField as DATE)) AS dt ... GROUP BY dt 但是,此WEEK函数返回一个数字。如果我有多年,我需要添加一个YEAR()函数。是否有更好的方法将该字段转换成一个日期字段?如果用日期格式按周汇总日期也可以(甚至更好): 2010-01-07 2010-01-14 2010-01-21 etc在MySQL中有一个函数:STR\u TO\u DATE()

Microsoft SQL:

我有一个数据库查询,它将字符串转换为日期,然后聚合:

WEEK(CAST(myDateField as DATE)) AS dt
...
GROUP BY dt
但是,此
WEEK
函数返回一个数字。如果我有多年,我需要添加一个
YEAR()
函数。是否有更好的方法将该字段转换成一个日期字段?如果用日期格式按周汇总日期也可以(甚至更好):

2010-01-07
2010-01-14

2010-01-21 etc

在MySQL中有一个函数:
STR\u TO\u DATE()

您必须指定日期格式,例如:

截止日期('2013-05-01','%Y-%m-%d')

对于MSSQL,您需要通过格式id定义日期的确切格式:

SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy

SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd

SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy

SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy

SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy

我不确定你想要什么作为输出。似乎你在努力争取每周的第一次约会

如果您的数据“密集”(即您在每个日期都有数据),您可以执行以下操作:

select min(myDateField) as dt
...
GROUP BY year(myDateField), week(myDateField);
尽管您的代码中有
cast()
,但我相信名为“MyDateField”的字段存储为日期/日期时间,而不是字符串

如果要将日期转换为ISO标准:

select convert(varchar(10), min(myDateField), 121),  -- puts it in YYYY-MM-DD format (my favorite)
最后,也许您根本不想使用
week()
。也许你只是想找到一周的第一天。您可以通过从日期中减去星期几来完成此操作:

select dateadd(dd, datepart(dw, 1 - myDateField), myDateField) as dt
...
GROUP BY dateadd(dd, datepart(dw, 1 - myDateField), myDateField);

在这种结构下,
groupby
select
具有相同的参数。

我正在尝试转换在SAS中使用
INTNX
的SQL的哪个版本(Microsoft、mySQL、Oracle等),如果这为您提供了我所做工作的参考框架。请参阅此链接,这非常完美,实际上,我正在向Teradata传递一个查询,它的SQL有点不同。这给了我完成工作所需的想法,谢谢。Thanx没有接受20分钟前发布的相同答案。答案不一样。Gordon发表了DATEADD文章,给了我解决问题的想法。