PHP/MYSQL - 如何仅为每个不同的值选择最新值

0 php mysql select

我是法国人,英语不是很流利,所以我会尽量清楚.

我有'我的表',ID,CODE,value1,value2和Date

我试图获得每个唯一代码的最新日期,1代表CODE

有了这个请求它什么也没显示:

$sql = 'SELECT value1, value2,Date 
FROM 'my table' 
GROUP BY CODE 
HAVING Date = MAX(Date) 
ORDER BY CODE ASC';
Run Code Online (Sandbox Code Playgroud)

有人帮我吗?

谢谢.

编辑:

我的桌子是Geoloc

> ID    IMEI    Latitude    Longitude   Date
6   24047780 49.027063  1.147213    2014-01-02 11:19:45
8   24047780 48.738078  1.366940    2014-01-02 11:20:31
9   24048781 48.864715  2.350216    2014-01-02 12:23:12
10  24048781 48.8686132 2.3572024   2014-01-07 16:06:40
11  24048783 49.027063  1.147213    2014-01-07 16:07:45
Run Code Online (Sandbox Code Playgroud)

我想显示imei的最新结果.

EDIT2:即时通讯使用

$sql4 = 'SELECT `ID`, `IMEI`, `LATITUDE`, `LONGITUDE`, `DATE`
FROM (SELECT *, 
IF(@lastId = @lastId:=IMEI, @Idx:=@Idx+1, @Idx:=0) rowNumber 
FROM `Geoloc` l, (SELECT @lastId:=0, @Idx:=0) A
ORDER BY `imei` DESC, `date` DESC
) AS A
WHERE rowNumber = 0 ';
// on envoie la requête 
$req4 = mysql_query($sql4) or die('Erreur SQL !<br>'.$sql4.'<br>'.mysql_error());
//the script i use to display informations
while( $Geoloc = mysql_fetch_assoc($req4)) 
            {
            $array[] = "new google.maps.LatLng(".$Geoloc['Latitude']." , ".$Geoloc['Longitude'].") " ;
            $marqueurs[] = 
            "// affichage du marqueur_".$i." - start 
            var marker_".$i."=new google.maps.Marker({position:".$array[$i].",});
            marker_".$i.".setMap(map);
            var infowindow_".$i." = new google.maps.InfoWindow({content:\"".$Geoloc['Date']." - ".$Geoloc['IMEI']." - \"});
            google.maps.event.addListener(marker_".$i.", 'click', function() {infowindow_".$i.".open(map,marker_".$i.");});
    // affichage du marqueur_".$i." - end \n
            ";
            $i++ ;
            }
Run Code Online (Sandbox Code Playgroud)

有了这个sql请求,lattude和经度没有显示,由aziz给出的sql请求,它们被显示,但是如果1个imei的2个最大日期相同,则显示两个

编辑3:没关系,这是CAPS的一个问题,谢谢你

Azi*_*ikh 5

试试这个:

SELECT t.* 
FROM table1 t
JOIN (
  SELECT MAX(`date`) as maxdate, code
  FROM table1
  GROUP BY code
) t1
ON t.code = t1.code AND t.`date` = t1.maxdate
ORDER BY code
Run Code Online (Sandbox Code Playgroud)

对于每个代码,您获取MAX日期,然后将此内部表与主表连接以获取所需的记录.

如果你的数据中有重复的代码对和maxdate,那么也要使用JOIN中的最大ID,如下所示:

SELECT t.* 
FROM table1 t
JOIN (
  SELECT MAX(`id`) as `id`, MAX(`date`) as maxdate, code
  FROM table1
  GROUP BY code
) t1
ON t.code = t1.code AND t.`date` = t1.maxdate AND t.`id` = t1.`id`
ORDER BY code
Run Code Online (Sandbox Code Playgroud)