MySQL Query в представлении - PullRequest
0 голосов
/ 12 марта 2012

У меня есть следующий запрос, который я использую, и он прекрасно работает:

SELECT * FROM 

(
SELECT * FROM `Transactions` ORDER BY DATE DESC
) AS tmpTable

GROUP BY Machine
ORDER BY Machine ASC

Что не здорово, это когда я пытаюсь создать вид из него. В нем говорится, что подзапросы не могут использоваться в представлении, и это нормально - я искал здесь и в Google, и большинство людей говорят, чтобы разбить это на несколько представлений. Хорошо.

Я создал представление, упорядочивающее по дате, и затем представление, которое просто использует это представление для группировки по группам и упорядочения по машинам - однако результаты не совпадают. Кажется, он взял порядок дат и выбросил его в окно.

Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

1 голос
/ 12 марта 2012

В итоге это было решением, после нескольких часов попыток, очевидно, вы можете использовать подзапрос ГДЕ, но не ОТ?

CREATE VIEW something AS

SELECT * FROM Transactions AS t
WHERE Date =
(
  SELECT MAX(Date)
  FROM Transactions
  WHERE Machine = t.Machine
)
0 голосов
/ 12 марта 2012

Здесь вам не нужен подзапрос. Вы хотите иметь последнюю дату в группе машин, верно?

Так что просто сделай

SELECT
t.*, MAX(date)
FROM Transactions t
GROUP BY Machine
ORDER BY Machine ASC /*this line is obsolete by the way, since in MySQL a group by automatically does sort, when you don't specify another sort column or direction*/

GROUP BY используется вместе с агрегатной функцией (в вашем случае MAX ()) в любом случае.

В качестве альтернативы вы также можете указать несколько столбцов в предложении ORDER BY.

SELECT 
* 
FROM
Transactions
GROUP BY Machine
ORDER BY Date DESC, Machine ASC

должен также дать вам то, чего вы хотите достичь. Но использование функции MAX () определенно является лучшим способом.

На самом деле я никогда не использовал GROUP BY без агрегатной функции.

...