在SQL中使用min和DATE()

时间:2014-11-25 18:08:59

标签: mysql sql

我正在运行SQL查询,我想使用min()DATE()

我试过了:

and min(DATE(datetime)) = '".date("Y-m-d")."'

但这不起作用,我应该使用什么?

我试过的完整查询是:

select 
  min(datetime) as d, 
  ticketnumber 
from ticket_updates 
where type = 'update' 
and min(DATE(datetime)) = '".date("Y-m-d")."' 
group by ticketnumber

我也尝试过:

select 
  min(datetime) as d, 
  ticketnumber 
from ticket_updates 
where type = 'update' 
and min(datetime) >= '".date("Y-m-d 00:00:00")."' 
and min(datetime) <= '".date("Y-m-d 23:59:59")."'
group by ticketnumber

但我收到错误说:

  

无效使用群组功能

4 个答案:

答案 0 :(得分:1)

您无需在where子句中使用min函数。

为了便于阅读,我还更改了使用between的位置。

select 
  min(datetime) as d, 
  ticketnumber 
from ticket_updates 
where type = 'update' 
and datetime between'".date("Y-m-d 00:00:00")."' 
                and '".date("Y-m-d 23:59:59")."'
group by ticketnumber

此代码将在提供的日期找到每个票号的最低日期/时间。

查看此FIDDLE

答案 1 :(得分:1)

如果您想要最早的日期时间,请使用having子句:

select min(datetime) as d, ticketnumber 
from ticket_updates 
where type = 'update' 
group by ticketnumber
having min(DATE(datetime)) = '".date("Y-m-d")."'

这些作为构造看起来很奇怪,因为min会得到你输入的日期。所有工作都在过滤中。

答案 2 :(得分:0)

将您的查询包裹到另一个:

SELECT d, ticketnumber FROM(
  select 
  min(datetime) as d, 
  ticketnumber 
  from ticket_updates 
  where type = 'update' 
  group by ticketnumber
) t
WHERE d between '...' and '...'

FIDDLE

答案 3 :(得分:-1)

如果您想获得最短约会日期,则需要有一列分组。例如,

Select id, Min(Date) as Min_date
from mytable group by id

您能提供更多详细信息,以便我们可以尝试解决此问题吗?