Sql 在Firebird中按日期分组而不按时间分组

Sql 在Firebird中按日期分组而不按时间分组,sql,group-by,casting,firebird,Sql,Group By,Casting,Firebird,我想从Firebird表中对日常销售进行分组 我用这种方式编写了SQL语句 SELECT CAST(STARTTIME AS DATE) FROM TESTTABLE GROUP BY CAST(STARTTIME AS DATE) 这是一个错误 Dynamic SQL Error SQL error code = -104 Token unknown - line 3, char 10 CAST 也许可以试试这个: SELECT src.STARTDATE FROM ( SELE

我想从Firebird表中对日常销售进行分组

我用这种方式编写了SQL语句

SELECT CAST(STARTTIME AS DATE)
FROM TESTTABLE
GROUP BY CAST(STARTTIME AS DATE)
这是一个错误

Dynamic SQL Error SQL error code = -104 Token unknown - line 3, char 10 CAST 
也许可以试试这个:

SELECT src.STARTDATE
FROM (
    SELECT CAST(STARTTIME AS DATE) AS STARTDATE
    FROM TESTTABLE
) src
GROUP BY src.STARTDATE
如果这就是您想要的,那么从逻辑上讲,您所做的与
不同的
相同。你甚至可以:

SELECT DISTINCT CAST(STARTTIME AS DATE)
FROM TESTTABLE
也许可以试试这个:

SELECT src.STARTDATE
FROM (
    SELECT CAST(STARTTIME AS DATE) AS STARTDATE
    FROM TESTTABLE
) src
GROUP BY src.STARTDATE
如果这就是您想要的,那么从逻辑上讲,您所做的与
不同的
相同。你甚至可以:

SELECT DISTINCT CAST(STARTTIME AS DATE)
FROM TESTTABLE

您的查询在Firebird 2.0、Firebird 2.1、Firebird 2.5和Firebird 3.0下工作。它在Firebird 1.5及更早版本下不起作用

除了ravioli提供的答案外,您还可以应用以下变通方法:

使用
分组依据中的列索引

SELECT CAST(STARTTIME AS DATE)
FROM TESTTABLE
GROUP BY 1
SELECT CAST(STARTTIME AS DATE) AS ALIAS
FROM TESTTABLE
GROUP BY ALIAS
在分组依据中使用列别名

SELECT CAST(STARTTIME AS DATE)
FROM TESTTABLE
GROUP BY 1
SELECT CAST(STARTTIME AS DATE) AS ALIAS
FROM TESTTABLE
GROUP BY ALIAS

您的查询在Firebird 2.0、Firebird 2.1、Firebird 2.5和Firebird 3.0下工作。它在Firebird 1.5及更早版本下不起作用

除了ravioli提供的答案外,您还可以应用以下变通方法:

使用
分组依据中的列索引

SELECT CAST(STARTTIME AS DATE)
FROM TESTTABLE
GROUP BY 1
SELECT CAST(STARTTIME AS DATE) AS ALIAS
FROM TESTTABLE
GROUP BY ALIAS
在分组依据中使用列别名

SELECT CAST(STARTTIME AS DATE)
FROM TESTTABLE
GROUP BY 1
SELECT CAST(STARTTIME AS DATE) AS ALIAS
FROM TESTTABLE
GROUP BY ALIAS

您使用的是哪个Firebird版本?您的查询在Firebird 2.1、Firebird 2.5和Firebird 3中运行良好。我正在使用Firebird 2.5.2,但它不起作用。但在ravioli的第一个代码中效果很好。谢谢…你为什么还在用Firebird 2.5.2?这个版本已经有将近7年的历史了。Firebird 2.5.9是2.5.x的最新版本,Firebird 3.0.4是当前的最新版本。但是,我刚刚安装了Firebird 2.5.2,无法通过您的查询重现错误。我刚刚测试了早期版本,您的查询也适用于Firebird 2.0,但不适用于Firebird 1.5(可能更早)。这意味着您没有使用Firebird 2.5.2,但实际上使用的是Firebird 1.5(或者可能是InterBase)。您使用的是哪个Firebird版本?您的查询在Firebird 2.1、Firebird 2.5和Firebird 3中运行良好。我正在使用Firebird 2.5.2,但它不起作用。但在ravioli的第一个代码中效果很好。谢谢…你为什么还在用Firebird 2.5.2?这个版本已经有将近7年的历史了。Firebird 2.5.9是2.5.x的最新版本,Firebird 3.0.4是当前的最新版本。但是,我刚刚安装了Firebird 2.5.2,无法通过您的查询重现错误。我刚刚测试了早期版本,您的查询也适用于Firebird 2.0,但不适用于Firebird 1.5(可能更早)。这意味着您没有使用Firebird 2.5.2,但实际上使用的是Firebird 1.5(或者可能是InterBase)。它可以按原样工作,但cast不能与group一起工作by@zokanzi我测试了它,在Firebird 2.0及更高版本中,
groupby
中的
cast
是有效的。您正在使用Firebird 1.5或更早版本,或者正在进行其他操作。我确信Firebird 2.5.2版。也许我打错了交易。我将在空闲时间简单地测试它。谢谢您的帮助。它可以正常工作,但cast不能与组一起工作by@zokanzi我测试了它,在Firebird 2.0及更高版本中,
groupby
中的
cast
是有效的。您正在使用Firebird 1.5或更早版本,或者正在进行其他操作。我确信Firebird 2.5.2版。也许我打错了交易。我将在空闲时间简单地测试它。谢谢你的帮助。