Mysql 如果不在SQL代码中使用groupby,如何选择最大行数?
我创建了一个sql代码,但问题是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
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