我正在创建这个应用程序,在当前日期活动或不活动的人员注册时很重要。我的表格结构如下所示:MySQL问题!只需要从一行中选择唯一的值
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| kid_id | int(11) | NO | | NULL | |
| status | varchar(50) | NO | | NULL | |
| timestamp | timestamp | NO | | CURRENT_TIMESTAMP | |
对我而言重要的是什么;仅选择时间戳等于当前日期的值。接下来,我需要根据kid_id检查最新状态是否为“活动”或“非活动”。我到目前为止已经弄清楚了这一点。
SELECT kid_id , status , timestamp FROM actions WHERE date(timestamp) = CURDATE() ORDER BY timestamp DESC;
它返回这些值:
+--------+----------+---------------------+
| kid_id | status | timestamp |
+--------+----------+---------------------+
| 4 | active | 2010-08-23 12:10:03 |
| 3 | inactive | 2010-08-23 10:53:18 |
| 3 | active | 2010-08-23 10:53:10 |
+--------+----------+---------------------+
现在唯一的问题是,我收到都与 “kid_id”= “3” 活动和非活动状态。 所以我的问题是我如何只选择每个kid_id的最新状态。
提前非常感谢您的帮助。非常感谢。
----------编辑
我会尽量让我的观点更加清楚一点。
这是我的表,因为它看起来现在...
+--------+----------+---------------------+
| kid_id | status | timestamp |
+--------+----------+---------------------+
| 3 | inactive | 2010-08-23 18:32:19 |
| 4 | active | 2010-08-23 12:10:03 |
| 3 | active | 2010-08-23 10:53:10 |
+--------+----------+---------------------+
3 rows in set (0.00 sec)
我想检索这些值只有这些
| 3 | inactive | 2010-08-23 18:32:19 |
| 4 | active | 2010-08-23 12:10:03 |
以下所有建议的解决方案返回这些值:
| 4 | active | 2010-08-23 12:10:03 |
| 3 | active | 2010-08-23 10:53:10 |
顺便说一下......非常感谢所有的答复,我很感激所有的hel页。
如果我理解你的代码正确,这只返回活跃的孩子,而不是不活跃的孩子。如果我按时间戳排序,我可以得到所有值,但是我仍然无法消除kid_id 3的最后一个活动状态...如果有任何错误,请纠正我。 – nickifrandsen 2010-08-23 11:35:09
啊好吧我错了,对不起。那么shamittomar的代码应该做你想做的事 – Nicolas78 2010-08-23 11:46:24