Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 检查相邻列中相同条目的行(第2部分)_Mysql_Sql_Select - Fatal编程技术网

Mysql 检查相邻列中相同条目的行(第2部分)

Mysql 检查相邻列中相同条目的行(第2部分),mysql,sql,select,Mysql,Sql,Select,我需要一个select命令来执行以下操作: 我有一张这样的桌子 TIMESTAMP | ID | col1 | col2 | ... t | 23 | AAA | BBB | ... t | 23 | BBB | AAA | ... t | 59 | asf | 567 | ... t | 02 | XXX | ZZZ | ... t | 02 | YYY |

我需要一个select命令来执行以下操作:

我有一张这样的桌子

TIMESTAMP |    ID | col1 | col2 | ...

t         |    23 | AAA  |  BBB | ...
t         |    23 | BBB  |  AAA | ...
t         |    59 | asf  |  567 | ...
t         |    02 | XXX  |  ZZZ | ...
t         |    02 | YYY  |  XXX | ...

t-1       |    23 | AAA  |  BBB | ...
t-1       |    23 | BBB  |  AAA | ...
t-1       |    59 | asf  |  567 | ...
t-1       |    02 | XXX  |  ZZZ | ...
t-1       |    02 | YYY  |  XXX | ...

t-2       |    .. | ...  |  ... | ...
t-2       |    .. | ...  |  ... | ...
对于每一次,有时有两行具有相同的ID。现在我只想选择时间戳为t的最近的一行,它们在两个特定列中也有相同的直径相邻条目,如示例中的前两行。通过类比,这些具有相同ID但不同条目的条目可以看到最后两行

因此,对于该示例,我希望有两个选择:

TIMESTAMP |   ID  | col1 | col2 | ...
t         |   23  | AAA  |  BBB | ...
t         |   23  | BBB  |  AAA | ...

我知道它应该和这个一起工作

SELECT a.id, a.col1, a.col2
  FROM tbl AS a
  JOIN tbl AS b ON 
      (     a.id=b.id
        AND (a.col1 =  b.col2 OR  a.col2 = b.col1)
        AND (a.col1 != b.col1 AND a.col2 != b.col2)
      )
但是我不知道如何只选择最新的条目…

到目前为止,您的查询需要一个独特的条目以及最新的时间戳谓词:

select distinct ta.*
from tbl ta
  JOIN tbl AS tb ON 
      (     ta.id=tb.id
        AND (ta.col1 =  tb.col2 OR  ta.col2 = tb.col1)
        AND (ta.col1 != tb.col1 AND ta.col2 != tb.col2)
      )
inner join (
  SELECT a.id,max(a.`timestamp`) as maxTimestamp
  FROM tbl AS a
  JOIN tbl AS b ON 
      (     a.id=b.id
        AND (a.col1 =  b.col2 OR  a.col2 = b.col1)
        AND (a.col1 != b.col1 AND a.col2 != b.col2)
      )
  GROUP by a.id
) b on b.id = ta.id and b.maxTimestamp = ta.`timestamp`;

你说最新的是什么意思?今天的条目,最后3个小时,或者….?这个具有最大时间戳的条目,我认为应该是这样的:timestamp=从TBL中选择MAXTIMESTAMP似乎正确,它是否有效?我不确定,因为我不知道如何正确组合这两个语句…不幸的是,这不起作用,为什么要将时间戳放在“…”中?背后有什么意义吗?
select distinct ta.*
from tbl ta
  JOIN tbl AS tb ON 
      (     ta.id=tb.id
        AND (ta.col1 =  tb.col2 OR  ta.col2 = tb.col1)
        AND (ta.col1 != tb.col1 AND ta.col2 != tb.col2)
      )
inner join (
  SELECT a.id,max(a.`timestamp`) as maxTimestamp
  FROM tbl AS a
  JOIN tbl AS b ON 
      (     a.id=b.id
        AND (a.col1 =  b.col2 OR  a.col2 = b.col1)
        AND (a.col1 != b.col1 AND a.col2 != b.col2)
      )
  GROUP by a.id
) b on b.id = ta.id and b.maxTimestamp = ta.`timestamp`;