我有一个由名字,姓氏和日期组成的表格,如下所示:
_________
| People |____________________________________
|----------------------------------------------|
| first_name | last_name | date |
|----------------------------------------------|
| Jerry Garcia 01/01/2001 |
| Adam Garcia 01/02/2001 |
| Hans Fist 01/02/2001 |
| Lucy Fist 01/02/2001 |
|______________________________________________|
我有一个小组,按照这样的顺序排序:
$this->db->group_by("date, last_name");
$this->db->order_by('date ASC');
很自然地,你会期望它只给你两个加西亚的一排和两个拳的一排。我想做什么,并记住这是一个非常简化的情况,是按姓氏分组,但如果last_name = 'Garcia'
DONT 。所以你会在结果集中看到garcias和只有一个拳头。
我该怎么做?
如果它只是GROUP BY date, last_name NOT 'Garcia'
答案 0 :(得分:1)
也许您可以在第一个查询中添加类似
的内容WHERE name != 'Garcia'
然后,做
UNION SELECT * WHERE name = 'Garcia'
答案 1 :(得分:0)
您应该能够摆脱GROUP BY
并使用ORDER BY last_name DESC, date ASC
。
请注意,如果您遇到特定问题,请尝试解决问题。你会得到更好的答案!
答案 2 :(得分:0)
您可以使用GROUP BY
在HAVING
子句中使用条件。然后,您可以使用UNION
关键字加入两个结果集。
答案 3 :(得分:0)
我自己想出了一个解决方案。对于发现自己处于类似情况的任何人,只需在查询的CASE/WHEN
部分使用SELECT
语句即可。
您可以将其用作要分组的每一行的布尔标记。
CASE `last_name` WHEN 'Garcia' THEN '1' END AS is_garcia