2011-03-10 56 views
0

我有如下表结构 enter image description here 且该表中的以下数据 enter image description here 现在我想以这样的方式,这样查询我可以拥有所有列的值+特定game_id的max(当前时间)的值。如何获得最大(COLNAME)值,其中COLNAME是TIMESTAMP类型在MySQL的

我运行下面的查询 SELECT _id,game_id,inning_id,scoretype,oponentonescore,oponenttwoscore,CURRENTTIME,MAX(CURRENTTIME)AS最新FROM game_scores WHERE game_id = '2268'

,结果我是只得到一个行内,得到以下结果 enter image description here 但我想希望符合条件(即游戏ID 2268)中的所有行

如何撰写查询来实现这一目标?

在此先感谢

回答

1

我很抱歉,我没有实际测试过这一点,但也许这样的事情会做的伎俩:

SELECT 
    _id, 
    game_id, 
    inning_id, 
    scoretype, 
    oponentonescore, 
    oponenttwoscore, 
    currenttime, 
    latest 
FROM 
    game_scores 
JOIN (
    SELECT 
     MAX(currenttime) AS latest 
    FROM 
     game_scores 
    WHERE 
     game_id = '2268' 
) AS latest_calculation 
WHERE game_id = '2268'; 

虽然这个解决方案是在数据库上重于它是应用到重在查询从数据库返回后(如alex建议)找出它。

+0

高超的U让我的一天。虽然这可以通过另一种低效的方式来完成,但这种方式是最好的。谢谢 – Abhi 2011-03-10 08:02:23

2

MAX()是一个聚合型功能并获取多行的一个值。

因此将其删除,并使用像这样用PHP ...

$maxTime = 0; 

foreach($rows as $row) { 
    $maxTime = max($maxTime, strtotime($row['currenttime'])); 
} 

...或运行其他查询,虽然上面的应该是足够的...

SELECT MAX(`currenttime`) AS `latest` 
    FROM `game_scores` 
WHERE `game_id` = '2268' 

格式化您的便利OMG Ponies风格

+0

亚我知道这所以如何进行查询,以实现deesired结果 – Abhi 2011-03-10 07:37:51

+1

@Abhishek古普塔删除'MAX()',你可以用PHP的'最大值计算它()',或者,你可以运行另一个查询。 – alex 2011-03-10 07:38:57

+0

我不想运行另一个查询,因为当我运行另一个时,当前时间戳值可能会更改。我正在考虑使用SQL本身使用一些嵌套查询概念来实现这一点。可能吗? :) – Abhi 2011-03-10 07:47:02

0

这个查询的某些内容会执行所需的操作。未测试。

SELECT _id, game_id, inning_id, scoretype, oponentonescore, oponenttwoscore, 
    currenttime,maxtime from game_scores OUTER join (SELECT _id,MAX(currenttime) 
    as maxtime from game_scores) as t on t._id = game_scores._id where game_id = '2268'; 
+0

这个结果只有一行:( – Abhi 2011-03-10 07:59:56

+0

对不起,我用过内连接,试试外连接。 – DhruvPathak 2011-03-10 08:02:42