Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 创建返回具有最新日期的不同id的视图_Mysql_Sql_View - Fatal编程技术网

Mysql 创建返回具有最新日期的不同id的视图

Mysql 创建返回具有最新日期的不同id的视图,mysql,sql,view,Mysql,Sql,View,我试图构建一个包含用户id、日期和统计值的视图,但遇到了一个问题 基本上,如果我有一个包含以下内容的表: 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 -------------

我试图构建一个包含用户id、日期和统计值的视图,但遇到了一个问题

基本上,如果我有一个包含以下内容的表:

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
问题在于,虽然第一个视图返回与子查询相同的结果,但第二个视图给出了错误的日期值。

使用:

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个以上的id值与相同的“最大日期”值相同,则可能会出现重复--如果需要,请向查询中添加
DISTINCT

自联接保证为stat列返回的值-:


正确的。简单地说:获取每个id的最大日期,然后获取该id和日期的统计数据。
  SELECT a.id, 
         a.stat,
         MAX(a.date) AS date
    FROM YOUR_TABLE a
GROUP BY a.id
SELECT *
FROM table
GROUP BY id, date
HAVING MAX(date)