MYSQL的MAX MIN日期范围

李·威金斯

这使用的是Joomla数据库类,但希望这是有道理的。我需要根据某些日期范围返回最大日期和最小日期。我遇到的问题是,对于每个日期,我还需要version_id。我编写的查询仅返回最大日期值的版本。我要结束的是最小日期和最小日期值的版本ID,以及最大日期和最大日期值的版本ID。我认为这可能是工会的一个案例,但我不确定该如何做。

$query->select('a.ucm_type_id, a.ucm_item_id, a.version_id, MIN(a.save_date), MAX(a.save_date)')
    ->from($db->quoteName('#__ucm_history') . ' AS a')
    ->where('a.save_date BETWEEN ' . $db->quote($from_date) . ' AND ' . $db->quote($to_date))
    ->where('a.ucm_type_id IN (' . implode(',',$db->quote($content_type_ids)) . ')')
    ->group(array('a.ucm_type_id', 'a.ucm_item_id', ));
    // Join over the users for the checked out user.
    $query->select('b.type_title AS type')
    ->join('LEFT', '#__content_types AS b ON b.type_id=a.ucm_type_id');

    $db->setQuery($query);
阴影

仅当version_id字段在功能上依赖于ucm_type_id和时,您的查询才符合sql标准ucm_item_id在某些sql模式设置下,MySQL允许进行类似查询,因为的值version_id不确定,可能会导致一些令人讨厌的惊喜Fortunatley,在最近的mysql版本中,此模式默认为关闭。

您需要在子查询中获取日期范围内的最大日期和最小日期,并将其重新加入原始表中,以获取与这些日期关联的其他字段。

在sql中,您的查询看起来像sg,如下所示:

select a.ucm_type_id,
       a.ucm_item_id,
       a.version_id,
       a.save_date,
       if(a.save_date=t1.min_save_date, 'min','max') as min_or_max,
       b.type_title AS type 
from `#__ucm_history` a
inner join
    (select `ucm_type_id`, `ucm_item_id`, MIN(save_date) as min_save_date, MAX(save_date) as max_save_date
     from `#__ucm_history`
     where ucm_type_id IN (...)
           and save_date BETWEEN ... and ...
     group by `ucm_type_id`, `ucm_item_id`
    ) t1 on a.ucm_type_id=t1.ucm_type_id and a.ucm_item_id=t1.ucm_item_id
left join `#__content_types` AS b ON b.type_id=a.ucm_type_id
where a.save_date=t1.min_save_date or a.save_date=t1.max_save_date

将这些...部分替换为来自php代码的参数。

在sql环境中测试并调整查询,对查询满意后,即可使用ORM工具实施查询。但是我的猜测是您将需要将其作为原始sql语句运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MIN和MAX的GROUP BY-属于解决方案的日期范围

来自分类Dev

MIN和MAX的GROUP BY-属于解决方案的日期范围

来自分类Dev

MIN和MAX的MySQL索引

来自分类Dev

Mysql UNION Tables MAX日期

来自分类Dev

MySQL中的日期范围

来自分类Dev

在MySQL中显示MIN()和MAX()值

来自分类Dev

MySQL函数COUNT / MIN / MAX问题

来自分类Dev

MySQL:SUM / MAX / MIN GROUP BY查询优化

来自分类Dev

MySQL返回MIN ID而不是MAX ID?

来自分类Dev

MySQL Get Min,Max和最旧的分组

来自分类Dev

MySql - 选择 MAX & MIN 并返回相应的行

来自分类Dev

MySQL查找缺少的日期范围

来自分类Dev

MySQL查询平均日期范围

来自分类Dev

MySQL查询平均日期范围

来自分类Dev

在MySQL中检查日期范围

来自分类Dev

MySQL:按日期范围分组

来自分类Dev

MySQL从日期范围列表生成每个日期

来自分类Dev

使用 Max date 创建日期范围

来自分类Dev

MYSQL Max日期按两列分组

来自分类Dev

MYSQL:从多个列中选择MAX日期

来自分类Dev

varchar 日期转换为 max() date() mysql

来自分类Dev

在MySQL中选择MIN值后的SELECT MIN(MAX)

来自分类Dev

插入MySQL之前的MySQL日期范围检查

来自分类Dev

如何使用Array.from使用MIN MAX生成范围

来自分类Dev

将随机整数转换为范围[min,max]而不分支

来自分类Dev

MySQL:使用subselect计算本地化的MIN MAX

来自分类Dev

在JOIN MAX(date)MYSQL之后使用MIN值

来自分类Dev

MySQL保留MAX和MIN行并删除其余的

来自分类Dev

从MySQL中选择行并使用MAX和MIN进行分组