Mysql 如何按最大值(日期)检索行数据?
有一张桌子:Mysql 如何按最大值(日期)检索行数据?,mysql,sql,date,select,Mysql,Sql,Date,Select,有一张桌子: +---------+--------+---------------------+----------+ | user_id | marker | date | trans_id | +---------+--------+---------------------+----------+ | 6 | M | 2013-08-27 11:45:24 | 5 | | 6 | MA | 2013-
+---------+--------+---------------------+----------+
| user_id | marker | date | trans_id |
+---------+--------+---------------------+----------+
| 6 | M | 2013-08-27 11:45:24 | 5 |
| 6 | MA | 2013-08-27 11:45:42 | 6 |
| 6 | A | 2013-08-27 11:45:59 | 7 |
+---------+--------+---------------------+----------+
+---------+--------+---------------------+----------+
|用户标识|标记|日期|交易标识|
+---------+--------+---------------------+----------+
|6 | M | 2013-08-27 11:45:24 | 5|
|6 | MA | 2013-08-27 11:45:42 | 6|
|6 | A | 2013-08-27 11:45:59 | 7|
+---------+--------+---------------------+----------+
我测试了查询:
选择标记,最大(日期)为最大日期
从mytable
其中用户id=6
但这是不恰当的。
您将如何编写查询?
提前感谢。这将为您提供每个用户id的最新记录
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT user_id , MAX(date) date
FROM tableName
GROUP BY user_ID
) b ON a.user_id = b.user_id AND
a.date = b.date
-- WHERE a.user_id = 6 ==> if you want for specific user_id only
SELECT
a.user_id,
b.marker,
MAX(a.date) AS maxdate,
b.trans_id
FROM TableName a
JOIN TableName b
ON b.date = a.date AND a.user_id = b.user_id
GROUP BY a.user_id
ORDER BY a.date DESC;
这将为您提供每个用户id的最新记录
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT user_id , MAX(date) date
FROM tableName
GROUP BY user_ID
) b ON a.user_id = b.user_id AND
a.date = b.date
-- WHERE a.user_id = 6 ==> if you want for specific user_id only
SELECT
a.user_id,
b.marker,
MAX(a.date) AS maxdate,
b.trans_id
FROM TableName a
JOIN TableName b
ON b.date = a.date AND a.user_id = b.user_id
GROUP BY a.user_id
ORDER BY a.date DESC;
这将为您提供每个用户id的最新记录
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT user_id , MAX(date) date
FROM tableName
GROUP BY user_ID
) b ON a.user_id = b.user_id AND
a.date = b.date
-- WHERE a.user_id = 6 ==> if you want for specific user_id only
SELECT
a.user_id,
b.marker,
MAX(a.date) AS maxdate,
b.trans_id
FROM TableName a
JOIN TableName b
ON b.date = a.date AND a.user_id = b.user_id
GROUP BY a.user_id
ORDER BY a.date DESC;
MAX()
是一个聚合函数,就像SUM()
和COUNT()
一样。这些功能应与分组依据
结合使用这将为您提供每个用户id的最新记录
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT user_id , MAX(date) date
FROM tableName
GROUP BY user_ID
) b ON a.user_id = b.user_id AND
a.date = b.date
-- WHERE a.user_id = 6 ==> if you want for specific user_id only
SELECT
a.user_id,
b.marker,
MAX(a.date) AS maxdate,
b.trans_id
FROM TableName a
JOIN TableName b
ON b.date = a.date AND a.user_id = b.user_id
GROUP BY a.user_id
ORDER BY a.date DESC;
MAX()
是一个聚合函数,就像SUM()
和COUNT()
一样。这些函数应该与分组依据
结合使用。我的首选是加入子查询(如果您需要所有条目)
我的首选是加入子查询(如果您需要所有条目)
这取决于你想要什么。如果要在表中包含最近的行,则查询为:
SELECT *
FROM mytable
WHERE (user_id =6 AND date =(SELECT MAX(date) FROM mytable));
如果要按从最近到最早的日期对用户列表进行排序,则查询为:
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date DESC;
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date ASC;
如果要按最早到最近的日期对用户列表进行排序,则查询为:
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date DESC;
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date ASC;
这取决于你想要什么。如果要在表中包含最近的行,则查询为:
SELECT *
FROM mytable
WHERE (user_id =6 AND date =(SELECT MAX(date) FROM mytable));
如果要按从最近到最早的日期对用户列表进行排序,则查询为:
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date DESC;
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date ASC;
如果要按最早到最近的日期对用户列表进行排序,则查询为:
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date DESC;
SELECT *
FROM mytable
WHERE (user_id =6)
ORDER BY date ASC;
也有这样的方式
也有这样的方式
试着做这样的事情
SELECT marker , date
FROM mytable
WHERE user_id =6
ORDER BY date DESC
LIMIT 1;
不需要join或subselect语句
order by子句将按日期对结果进行排序,然后limit子句将仅选择第一行。尝试执行类似操作
SELECT marker , date
FROM mytable
WHERE user_id =6
ORDER BY date DESC
LIMIT 1;
不需要join或subselect语句
order by子句将按日期对结果进行排序,然后limit子句将只选择第一行。那么,如何在没有子查询(JOIN)的情况下获得相同的结果?我想不出任何不使用子查询的方法。这是另一种方法,好的,在第一种情况下,解释显示“使用临时;使用文件排序”,在第二种情况下,我们只有“使用where”。这意味着什么?哪一个问题更好?看看我的答案。。。没有子查询,请求速度比您的快。@Fred you answer仅适用于1个用户id
,如果OP为每个用户id
”添加了最新的记录会怎么样?如何在没有子查询的情况下获得相同的结果(JOIN)?我想不出任何不使用子查询的方法。这是另一种方法,好的,在第一种情况下,解释显示“使用临时;使用文件排序”,在第二种情况下,我们只有“使用where”。这意味着什么?哪一个问题更好?看看我的答案。。。没有子查询,请求速度比您的快。@Fred you answer仅适用于1个用户id
,如果OP为每个用户id
显示最新记录会怎么样?第一个示例适用于我。请向我解释在当前问题中哪种方式更好:1。在WHERE子句中使用子查询或在“WHERE”中使用JOIN语句对于这个示例子查询是最好的,因为它是一个限制查询。第一个示例适合我。请向我解释在当前问题中哪种方式更好:1。在WHERE子句中使用子查询或在“WHERE”中使用JOIN语句是最好的,因为它是一个限制查询。