2015-05-23 5 views
0

Я новичок здесь, но у меня есть одна небольшая большая проблема.выберите min date from max 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, но при выборе даты мин результат v1 от ID = 7 , но мне не нужен этот идентификатор.

Мне нужен идентификатор 4, потому что это первый (старший) идентификатор от последнего клиента.

Мне нужен запрос из этого результата.

Я использую этот запрос:

$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 клиент на службу.. 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 Просто замените 'client' в вашем запросе на мой запрос. Я думаю, что это то, что вам нужно. – Beginner

+0

@wearedoom Лучше обновите свой вопрос и добавьте все таблицы и некоторые примеры данных. – Beginner

Смежные вопросы