我有以下查询,我想检索每个组的最早/最晚日期。
每个小组可以有许多在不同日期旅行的成员,所以我想知道这些成员之间该组中最早的日期是什么。同样,这是对所有现有组完成的,然后按所选顺序显示。
这是我正在使用的查询:
public function sortByDate($order, $year)
{
$this->db->select('groups.*, general_info.proposed_date_of_arrival');
$this->db->from('groups');
$this->db->join('general_info', 'general_info.group_id = groups.group_id');
$this->db->where('YEAR(groups.group_year)', $year);
$this->db->group_by('groups.group_id');
$this->db->order_by("general_info.proposed_date_of_arrival", $order);
$val = $this->db->get();
}
但是上面只返回并比较每个组的最新/最近的条目,这不是应该生成的查询类型。
结果的输出:
array (size=2)
0 =>
array (size=5)
'group_id' => string '2' (length=1)
'group_leader_name' => string 'Bob' (length=7)
'group_year' => string '2013-11-01' (length=10)
'year' => string '2013' (length=4)
'proposed_date_of_arrival' => string '2014-02-22' (length=10)
1 =>
array (size=5)
'group_id' => string '1' (length=1)
'group_leader_name' => string 'John' (length=7)
'group_year' => string '2013-11-12' (length=10)
'year' => string '2013' (length=4)
'proposed_date_of_arrival' => string '2014-12-15' (length=10)
这两个测试组实际上分别有两个成员,第一组中最早的一个是2013-12-31的建议到达日期,而第二组中最早的是2014-01-19。
按升序排序的实际输出应为2013-12-31日期为首的组,以及日期为2014-01-19的组为下一组。但是,我得到了上面的数组结果,即比较最近的两个成员,而不是考虑所有成员提议的日期。如何在所有成员日期之间进行比较?
答案 0 :(得分:0)
我认为这是解决方案
public function sortByArrivalDateASC($year)
{
$this->db->select('groups.*, MIN(date(general_info.proposed_date_of_arrival)) as proposed_date_of_arrival');
$this->db->from('groups');
$this->db->join('general_info', 'general_info.group_id = groups.group_id');
//$this->db->where('YEAR(groups.group_year)', $year);
$this->db->group_by('group_id');
$val = $this->db->get();
}
我错过了分组的聚合函数。我认为我不需要实施降序,因为我们只想知道离开的最早时间。
Thanks to GROUP_BY MySQL reference和this w3schools explanation