Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 如果不在SQL代码中使用groupby,如何选择最大行数?_Mysql_Sql - Fatal编程技术网

Mysql 如果不在SQL代码中使用groupby,如何选择最大行数?

Mysql 如果不在SQL代码中使用groupby,如何选择最大行数?,mysql,sql,Mysql,Sql,我创建了一个sql代码,但问题是 Column A Column B CreationDate 1 50 2019-10-10 10:41 1 80 2019-10-10 10:43 1 70 2019-10-10 11:05 2 60 2019-10-10 10:40 2

我创建了一个sql代码,但问题是

Column A    Column B     CreationDate        
1              50        2019-10-10 10:41
1              80        2019-10-10 10:43
1              70        2019-10-10 11:05  
2              60        2019-10-10 10:40       
2              58        2019-10-10 10:41
2              50        2019-10-10 10:44  
2              47        2019-10-10 11:00
通过排序,最后我想看到与最新创建日期相关的数据,如:

Column A    Column B     CreationDate   
1              50        2019-10-10 11:05 
2              47        2019-10-10 11:00  
因此,我需要在CreationDate列中进行一些迭代,但我不知道如何在sql中进行迭代

我不能使用groupby,因为B列阻止它这样做。此列是在CreationDate创建的预测列。因此,我只想得到最新的预测。

您应该使用RANK()函数,例如

 ;WITH result as 
 ( SELECT ColumnA, ColumnB, CreationDate, 
   RANK() OVER(PARTITION BY ColumnA ORDER BY CreationDate DESC) as Rank
   FROM TableName
 )
 SELECT * FROM result WHERE Rank=1

您可以使用
notexists
仅获取不存在后续行条目的行:

select *
from mytable m
where not exists
(
  select *
  from mytable m2
  where m2.column_a = m.column_a
  and m2.creationdate > m.creationdate
)
order by column_a;

看起来你想要过滤。我将这样写:

select t.*
from t
where t.creation_date = (select max(t2.creation_date)
                         from t t2
                         where t2.a = t.a
                        );
如果您确实想避免使用聚合函数(尽管不需要),这里还有三种其他方法:

select t.*
from t
where t.creation_date = (select t2.creation_date
                         from t t2
                         where t2.a = t.a
                         order by t2.creation_date desc
                         limit 1
                        );
以及:

以及:


请尝试我为您编写的sql:

SELECT 
    a.Column_A, a.Column_B, b.latest_date
FROM
    your_table a
INNER JOIN
    (SELECT 
        Column_A, max(CreationDate) AS latest_date
    FROM
        your_table
    GROUP BY Column_A) b 
ON a.Column_A = b.Column_A
WHERE a.Column_B = 50;
随着请求的更改,图像中的期望值与描述不同,如果列_B固定为50,请尝试上面的sql。如果没有,请尝试以下sql:

SELECT 
    a.Column_A, a.Column_B, b.latest_date
FROM
    your_table a
INNER JOIN
    (SELECT 
        Column_A, max(CreationDate) AS latest_date
    FROM
        your_table
    GROUP BY Column_A) b 
ON a.Column_A = b.Column_A
AND a.CreationDate = b.latest_date

更正:最后,对于第2栏,我需要看到创建日期为2019-10-10 11:00。请查看我随附的照片,查看我的问题,然后编辑您的请求。
SELECT 
    a.Column_A, a.Column_B, b.latest_date
FROM
    your_table a
INNER JOIN
    (SELECT 
        Column_A, max(CreationDate) AS latest_date
    FROM
        your_table
    GROUP BY Column_A) b 
ON a.Column_A = b.Column_A
WHERE a.Column_B = 50;
SELECT 
    a.Column_A, a.Column_B, b.latest_date
FROM
    your_table a
INNER JOIN
    (SELECT 
        Column_A, max(CreationDate) AS latest_date
    FROM
        your_table
    GROUP BY Column_A) b 
ON a.Column_A = b.Column_A
AND a.CreationDate = b.latest_date