Mysql SQL-如何组合这三个SQL查询?
我是SQL新手,需要结合三个SQL查询的帮助 问题1 结果是3在本例中,该值将用于查询2中 问题2 这个结果是1。在这个例子中,这个值将在查询3中使用 问题3 以下是表格的结构:Mysql SQL-如何组合这三个SQL查询?,mysql,sql,Mysql,Sql,我是SQL新手,需要结合三个SQL查询的帮助 问题1 结果是3在本例中,该值将用于查询2中 问题2 这个结果是1。在这个例子中,这个值将在查询3中使用 问题3 以下是表格的结构: CREATE TABLE `tablename` ( `id` int(11) NOT NULL, `date` datetime NOT NULL, `level` int(11) NOT NULL, `run` int(11) NOT NULL, `cr` int(11) NOT NULL, `fr`
CREATE TABLE `tablename` (
`id` int(11) NOT NULL,
`date` datetime NOT NULL,
`level` int(11) NOT NULL,
`run` int(11) NOT NULL,
`cr` int(11) NOT NULL,
`fr` int(11) NOT NULL,
`dv` int(11) NOT NULL,
`levelpassed` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
以下是主键:
ALTER TABLE `tablename`
ADD PRIMARY KEY (`id`,`date`);
我需要从查询中了解所有三个值。最高液位、最高运行和通过的液位
谢谢你的帮助 尝试如下查询:
SELECT levelpassed ,
(SELECT max(LEVEL) LEVEL
FROM tablename
WHERE id = 1) level,
(SELECT max(run) run
FROM tablename
WHERE id = 1
AND LEVEL = 3) run
FROM tablename
WHERE id = 1
AND LEVEL =
(SELECT max(LEVEL) LEVEL
FROM tablename
WHERE id = 1)
AND run =
(SELECT max(run) run
FROM tablename
WHERE id = 1
AND LEVEL = 3);
事实上,这是相当低效的,但它应该做你需要的 这是您要查找的查询:
SELECT *
FROM tablename T
INNER JOIN (SELECT T2.id
,MAX(T2.level) AS [level]
FROM tablename T2) TL ON TL.id = T.id
AND TL.level = T.level
INNER JOIN (SELECT T3.id
,MAX(T3.run) AS [run]
FROM tablename T3) TL ON TR.id = T.id
AND TR.run = T.run
WHERE T.id = 1
希望这将对您的问题有所帮助。查询是否有结果输出 请尝试:
select levelpassed from tablename a where id = 1 and run = (select max(run) from tablename b where a.id = b.id) and level = (select max(level) from tablename c where a.id = c.id);
这三者的结合不会比单独执行更有效。事实上,在任何一个DBMS引擎中,我知道你不应该把它们结合起来,因为它们有一个不同的where子句。请在一个用例类型的故事中描述它的需要,而不是有人能够帮助你。如果没有它,至少我很难想象一个itIs id/level/run unique的用例,最后一个查询是否总是返回一行?@PeterLang id+date将是唯一的。id+级别+运行不是唯一的。最后一个查询应该只返回一行。您是否可以按级别DESC进行单个选择,运行DESC并使用LIMIT检索第一行?这只会给我级别PASSED的值。我需要知道这三种价值观。谢谢。@noc2spamツ LEVEL=3不应硬编码,因为LEVEL的值是查询的结果1@Karolis是的,我现在明白了。这最好单独实施。
SELECT levelpassed ,
(SELECT max(LEVEL) LEVEL
FROM tablename
WHERE id = 1) level,
(SELECT max(run) run
FROM tablename
WHERE id = 1
AND LEVEL = 3) run
FROM tablename
WHERE id = 1
AND LEVEL =
(SELECT max(LEVEL) LEVEL
FROM tablename
WHERE id = 1)
AND run =
(SELECT max(run) run
FROM tablename
WHERE id = 1
AND LEVEL = 3);
SELECT *
FROM tablename T
INNER JOIN (SELECT T2.id
,MAX(T2.level) AS [level]
FROM tablename T2) TL ON TL.id = T.id
AND TL.level = T.level
INNER JOIN (SELECT T3.id
,MAX(T3.run) AS [run]
FROM tablename T3) TL ON TR.id = T.id
AND TR.run = T.run
WHERE T.id = 1
select levelpassed from tablename a where id = 1 and run = (select max(run) from tablename b where a.id = b.id) and level = (select max(level) from tablename c where a.id = c.id);