MySQL с использованием MAX () с предложениями WHERE - PullRequest
6 голосов
/ 01 апреля 2012

У меня проблемы с созданием запроса MySQL с помощью PHP.У нас есть одна таблица с именем data_instant, в которую вводится серия кумулятивных наблюдений, называемая Count_Qty, и мы хотим извлечь предыдущую, чтобы вычесть ее из нового наблюдения, чтобы рассчитать увеличение.

$result = mysql_query("SELECT *, 
MAX(Record_Time) 
FROM data_instant 
WHERE Node_ID='$nodeID' AND Type='$type';

$row = mysql_fetch_array ($result);

В основном яОжидается, что будет возвращена максимальная строка Record_Time, но вместо этого будет получен только первый экземпляр.Предыдущее наблюдение имеет самый высокий Record_Time (метка даты Unix), поэтому мне непонятно, почему это не сработает ...

Ответы [ 4 ]

15 голосов
/ 02 апреля 2012

Если вы хотите получить строку с самым последним значением Record_Time, просто отсортируйте строки в порядке убывания Record_Time и получите верхнюю строку:

SELECT *
FROM data_instant
WHERE Node_ID='$nodeID'
  AND Type='$type'
ORDER BY Record_Time DESC
LIMIT 1;
1 голос
/ 01 апреля 2012

Предложение where выбирает все строки, соответствующие Node_ID = '$ nodeID' AND Type = '$ type'.

Для каждой из этих строк будут возвращены все поля и максимальное время записи.

Если вы хотите, чтобы строка с максимальным временем записи была добавлена ​​в ваше предложение where:

SELECT * 
FROM data_instant 
WHERE Node_ID='$nodeID' AND Type='$type' 
and Record_Time = (select MAX(Record_Time) 
        FROM data_instant 
        WHERE Node_ID='$nodeID' 
        AND Type='$type')
0 голосов
/ 01 апреля 2012

Я ожидаю, что будет возвращена максимальная строка Record_Time

Тогда вам нужно просто попросить этот столбец:

SELECT MAX(Record_Time) FROM data_instant 
WHERE Node_ID='$nodeID' AND Type='$type'

Это вернет максимальное время записи для указанного node_id и типа.

0 голосов
/ 01 апреля 2012

Если у вас больше, чем возвращается MAX, вы должны добавить GROUP BY к вашему утверждению, чтобы обеспечить правильную агрегацию:

SELECT columnA,
    columnB, 
    MAX(Record_Time) 
FROM data_instant 
WHERE Node_ID='$nodeID' AND Type='$type'
GROUP BY columnA, columnB;
...