Создание представления, которое возвращает отличный идентификатор с самой последней датой - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь создать представление, содержащее идентификатор_пользователя, дату и статистическое значение, но я столкнулся с проблемой.

По сути, если у меня есть таблица, содержащая:

ID  Stat  Date        
--------------------
01  AAA   01/01/2010
02  BBB   02/02/2010  
03  CCC   05/01/2010
03  DDD   06/01/2010
01  EEE   07/01/2010

Мой взгляд должен иметь:

ID  Stat  Date        
-------------------- 
02  BBB   02/02/2010 
03  DDD   06/01/2010
01  EEE   07/01/2010

Я посмотрел вокруг и обнаружил, что этот запрос будет работать:

  SELECT * 
    FROM (SELECT * 
            FROM TABLE 
        ORDER BY DATE DESC) tmp 
GROUP BY ID

Теперь проблема в том, что я не могу выполнять подзапросы в представлениях в MYSQL.

Я попытался разделить его на два представления, первое из которых выглядит так:

CREATE OR REPLACE VIEW VIEW_TEMP AS
  SELECT * 
    FROM TABLE 
ORDER BY DATE DESC

и второй:

CREATE OR REPLACE VIEW NEW_VIEW AS
  SELECT * 
    FROM VIEW_TEMP 
GROUP BY ID

Проблема в том, что, хотя первое представление возвращает те же результаты, что и подзапрос, второе представление дает мне неправильные значения даты.

Ответы [ 2 ]

0 голосов
/ 16 марта 2011
SELECT *
FROM table
GROUP BY id, date
HAVING MAX(date)
0 голосов
/ 16 марта 2011

Использование:

SELECT a.id, 
       a.stat,
       a.date
  FROM YOUR_TABLE a
  JOIN (SELECT t.id,
               MAX(t.date) AS max_date
          FROM YOUR_TABLE t
      GROUP BY t.id) b ON b.id = a.id
                      AND b.max_date = a.date

Я не проверял это для создания представления, но я напоминаю, что MySQL не разрешал подзапросы в представлениях. Согласно документации, об ограничениях просмотра :

Оператор SELECT не может содержать подзапрос в предложении FROM.

Кроме того, существует вероятность дубликатов, если есть 2+ значения идентификатора с одинаковыми максимальными значениями даты. При необходимости добавьте DISTINCT к запросу.

Самостоятельное соединение гарантирует, что значение, возвращаемое для столбца статистики, - , чего нельзя сказать, если использовать скрытый столбец MySQL в функциональности GROUP BY :

  SELECT a.id, 
         a.stat,
         MAX(a.date) AS date
    FROM YOUR_TABLE a
GROUP BY a.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...