为什么我不能在这里按日期(开始时间)分组?



我的表中有一个名为startTime的日期/时间字段。

我希望输出如下:

select
YEAR(startTime),
MONTH(startTime),
DAY(startTime),
dayofmonth(startTime),
startTime,
...

这很好,我只需要按startTime分组。

然而,对于我的输出,我只对startTime的日期部分感兴趣。

所以我把我的输出改为

select
YEAR(startTime),
MONTH(startTime),
DAY(startTime),
dayofmonth(startTime),
DATE(startTime),
...

当我尝试运行这个时,SQL会让我按年、月、日、月日和日期(startTime(进行分组。

这似乎是date((函数的一个怪癖?

我想这可能是由于startTime字段的时间部分,但年、月、日和月的日期并不比日期更精细,所以我很困惑为什么要按这些分组。

非常感谢您的任何见解!

我当前的代码:

YEAR(startTime),
MONTH(startTime),
DAY(startTime),
dayofmonth(startTime),
date(startTime),
count(id)
from
bookings
group by 1, 2, 3, 4, 5

在您的select语句中,我们必须为所选列(作为一个组(的每个不同值指定不同的值。

例如,如果您在select子句中以及在group-by-clause中都有startime,我们将获得所选属性的不同值-日期、月份、年份和;startTime的每个唯一值。但是,如果从select子句中删除starttime,则所选的属性将不再保证是唯一的。

考虑两个startTime值2020-03-12T01:01.000UTC和2020-03-12T02:02:02.0000UTC,如果我们按startTime分组(作为两个不同的startTime(,则预计会产生两行,但这两行中所选的年、月和日期值将相同(因为它们只在时间部分不同(,这将打破合同。

因此,我们只能在select子句中有一组属性,它必须为group-by子句中的每个属性组合提供不同的值。

最新更新