2015-05-23 49 views
0

我是新来的,但我有一个小问题。从表中选择最小日期从最大ID

我有此表(例如)

id | client| date 
------------------------------ 
7 | v1 | 2015-05-20 
6 | v1 | 2015-05-20 
5 | v1 | 2015-05-01 
4 | v1 | 2015-03-05 
3 | v2 | 2015-02-02 
2 | v3 | 2015-01-30 
1 | v1 | 2015-01-01 

我需要第一行从最后一个客户端,这种方式是客户端V1,但是当我选择分钟日期结果是从ID = 7 V1 ,但我不需要这个ID。

我需要ID 4,因为是最后一个客户端的第一个(旧的)ID。

我需要从该结果查询。

我使用此查询:

$re=mysql_query('SELECT traffic.*, client.alias FROM traffic INNER JOIN service ON traffic.service_id = service.service_id INNER JOIN client ON service.client_id= client.client_id WHERE vehicle="'.$_GET['s'].'" AND client.alias = "'.$Days1.'" GROUP BY client.alias ORDER BY traffic.date ASC LIMIT 1'); 

我的表是:

mysql> select traffic_id, service_id, date, vehicle from traffic limit 5; 
+-------------+-------------+---------------------+----------------+ 
| traffic_id | service_id | date    | vehicle  | 
+-------------+-------------+---------------------+----------------+ 
|  1057967 |  1106746 | 2012-01-02 06:35:23 | 2816   | 
|  1057968 |  1106747 | 2012-01-02 06:35:55 | 2817   | 
|  1057969 |  1106748 | 2012-01-02 06:36:11 | 48789   | 
|  1057970 |  1106749 | 2012-01-02 06:37:27 | 48888   | 
|  1057971 |  1106750 | 2012-01-02 06:37:59 | 48887   | 
+-------------+-------------+---------------------+----------------+ 
5 rows in set (0.00 sec) 


mysql> select service_id, client_id from service limit 5; 
+-------------+------------+ 
| service_id | client_id | 
+-------------+------------+ 
|  1106746 |   1 | 
|  1106747 |   2 | 
|  1106748 |   2 | 
|  1106749 |   3 | 
|  1106750 |   4 | 
+-------------+------------+ 
5 rows in set (0.02 sec) 

mysql> select client_id, alias from client limit 5; 
+------------+------------+ 
| client_id | alias  | 
+------------+------------+ 
|   1 | EXPRESS | 
|   2 | CONWAY  | 
|   3 | ACC  | 
|   4 | GO   | 
|   5 | ACCEL  | 
+------------+------------+ 
5 rows in set (0.02 sec) 

有什么建议?

+0

如果两个用户共享MIN(日期)(就像他们共享MAX(日期)) – Strawberry

+0

哪些用户?或者你的意思是客户 – wearedoom

+0

是 - 客户。 – Strawberry

回答

0

所以,举例来说...

SELECT x.* 
    FROM my_table x 
    JOIN 
    (SELECT * FROM my_table ORDER BY id DESC LIMIT 1) y 
    ON y.client = x.client 
    AND y.id > x.id 
ORDER 
    BY x.id DESC 
LIMIT 1; 
1

你可以试试这个:

SELECT 
    cd1.id, 
    cd1.client, 
    cd1.`date` 
FROM clientData AS cd1 
    INNER JOIN ( 
    SELECT * 
    FROM clientData 
    ORDER BY id DESC 
    LIMIT 1 
) AS cd2 ON cd1.client = cd2.client AND cd1.id != cd2.id 
ORDER BY cd1.`date` 
LIMIT 1; 

这里是sqlfiddle

+0

查询看起来不错,这是我的查询:$重新=请求mysql_query(“SELECT *交通,client.alias远离交通 INNER JOIN服务 ON traffic.service_id = service.service_id INNER JOIN客户 ON服务。 client_id = client.client_id WHERE vehicle =“'。$ _ GET ['s']。'”AND client.alias =“'。$ Days1。'” GROUP BY client.alias ORDER BY traffic.date ASC LIMIT 1' );我怎样才能把你的查询放在我的查询中。非常感谢。 – wearedoom

+0

@ wearedoom只需在您的查询中将“客户端”替换为我的查询。我认为这是你需要的。 – Beginner

+0

@ wearedoom更新您的问题并添加所有表格和一些示例数据。 – Beginner

相关问题