Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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-如何组合这三个SQL查询?_Mysql_Sql - Fatal编程技术网

Mysql SQL-如何组合这三个SQL查询?

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`

我是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` 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);