我的表中有一个名为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子句中的每个属性组合提供不同的值。