Mysql 查询选择具有相同列值(日期)的最后一条记录

Mysql 查询选择具有相同列值(日期)的最后一条记录,mysql,sql,Mysql,Sql,表模式 id date ---- ------- 1020 1990-02-15 1020 1990-02-15 1060 1990-02-15 1020 1990-03-15 1020 1990-03-15 1020 1990-02-10 查询以选择具有相同日期且id=1020的上次插入记录 日期格式yyyy-mm

表模式

id              date
----            -------
1020            1990-02-15
1020            1990-02-15
1060            1990-02-15
1020            1990-03-15
1020            1990-03-15
1020            1990-02-10
查询以选择具有相同日期且id=1020的上次插入记录
日期格式yyyy-mm-dd

按最后一条记录,我假定您指的是具有最新日期的记录

select * from table where id=1020 order by date desc limit 1

我想你说的最后一条记录是指日期最新的那一条

select * from table where id=1020 order by date desc limit 1
因为它是MySQL

SELECT * 
FROM table 
WHERE id=1020 
ORDER BY `date` desc 
LIMIT 1
但我还有一个问题要问你,如果你有这样的记录呢

1020            1/11/12
1020            1/12/12
1020            1/12/12
1020            1/13/12
它会返回什么

在您的情况下,日期当前没有格式化,我想它是保存为VARCHAR的,这就是为什么您需要使用STR_to_date函数将其格式化回日期,并使用所需的格式从该显示中格式化

SELECT DATE_FORMAT(STR_TO_DATE(`date`, '%m/%d/%y'), '%d-%m-%Y') lastDate
FROM table 
WHERE id = 1020 
ORDER BY `date` desc 
LIMIT 1
更新1

所以你需要有相同日期的记录,对吗?试试这个。为此,它创建了一个子查询,返回最新的日期,并且具有相同的日期

SELECT *
FROM tablename
WHERE id = 1020 AND
        `Date` = (
                    SELECT  MAX(`date`) maxDate
                    FROM    tableName
                    GROUP BY `date`
                    HAVING COUNT(`DATE`) > 1
                 )
因为它是MySQL

SELECT * 
FROM table 
WHERE id=1020 
ORDER BY `date` desc 
LIMIT 1
但我还有一个问题要问你,如果你有这样的记录呢

1020            1/11/12
1020            1/12/12
1020            1/12/12
1020            1/13/12
它会返回什么

在您的情况下,日期当前没有格式化,我想它是保存为VARCHAR的,这就是为什么您需要使用STR_to_date函数将其格式化回日期,并使用所需的格式从该显示中格式化

SELECT DATE_FORMAT(STR_TO_DATE(`date`, '%m/%d/%y'), '%d-%m-%Y') lastDate
FROM table 
WHERE id = 1020 
ORDER BY `date` desc 
LIMIT 1
更新1

所以你需要有相同日期的记录,对吗?试试这个。为此,它创建了一个子查询,返回最新的日期,并且具有相同的日期

SELECT *
FROM tablename
WHERE id = 1020 AND
        `Date` = (
                    SELECT  MAX(`date`) maxDate
                    FROM    tableName
                    GROUP BY `date`
                    HAVING COUNT(`DATE`) > 1
                 )
这有帮助吗

select max(date) from table where id=1020;
这有帮助吗

select max(date) from table where id=1020;
试一试

SELECT * FROM schema WHERE id=1020 ORDERBY date DESC limit 1;
或者选择你喜欢的日期的最大值

SELECT MAX(date) from schema WHERE id = 1020;
试一试

SELECT * FROM schema WHERE id=1020 ORDERBY date DESC limit 1;
或者选择你喜欢的日期的最大值

SELECT MAX(date) from schema WHERE id = 1020;

没有自动增量列吗?没有自动增量列吗?@chetan我的意思是从上面的示例返回的日期。日期列的数据类型是什么?日期列的数据类型是日期。从上面的示例中,它将仅返回1020 1/12/12秒,因为如果dd-mm-yyyy,则1/13/12无效,并且我的查询仍然没有解决,因为根据您的示例,我需要2行和3行,并且我不知道具有相同数据的行数,所以我不能使用限制COUNTDATE>1在上面的查询中有什么用。当我使用上面的查询作为SELECT count*FROM tablename时,其中id=1020,Date=SELECT MAXdate MAXdate FROM tablename GROUP BY Date,COUNTDATE>1,对于一条记录,它返回0。@chetan它将过滤掉具有如果是同一个日期,尝试删除它,它将返回最新的日期,有无重复。如何获得Count*motive。@chetan我的意思是,从上面的示例中,它将返回什么日期。日期列的数据类型是什么?日期列的数据类型是日期。从上面的示例中,它将仅返回1020 1/12/12秒,因为如果dd-mm-yyyy,则1/13/12无效,并且我的查询仍然没有解决,因为根据您的示例,我需要2行和3行,并且我不知道具有相同数据的行数,所以我不能使用限制COUNTDATE>1在上面的查询中有什么用。当我使用上面的查询作为SELECT count*FROM tablename时,其中id=1020,Date=SELECT MAXdate MAXdate FROM tablename GROUP BY Date,COUNTDATE>1,对于一条记录,它返回0。@chetan它将过滤掉具有同一个日期,尝试删除该日期,它将返回最新的日期,有无重复。我如何才能获得Count*动机。