Mysql 我需要帮助解决这个问题
假设我有一个有两列的表。实际上,它将位于两个不同的表中,但为了简化,让我们使用一个表。我只是想知道我如何处理这个问题Mysql 我需要帮助解决这个问题,mysql,sql-server,Mysql,Sql Server,假设我有一个有两列的表。实际上,它将位于两个不同的表中,但为了简化,让我们使用一个表。我只是想知道我如何处理这个问题 A | B ------------------------ 2016-01 | 2015-00 2016-02 | 2015-01 2017-01 | 2017-01 2018-00 | 2018-01 如何编写一个选择列a并将其与列B进行比较的查询 我想要 2016-01对应于2015-01 2016-02至2015-01
A | B
------------------------
2016-01 | 2015-00
2016-02 | 2015-01
2017-01 | 2017-01
2018-00 | 2018-01
如何编写一个选择列a
并将其与列B
进行比较的查询
我想要
对应于2016-01
2015-01
至2016-02
2015-01
至2017-01
2017-01
至2018-00
(因为2017-01
小于2018-00
)2018-01
A
仅从列B
中选择一个值,其中列A
大于列B
我试着写一个查询
SELECT A FROM TB1 WHERE '1016-01' >= (SELECT MAX(B) FROM TB1)
但是这个查询不起作用,因为max(b)
将始终返回'2017-01使用两个不同的表
SELECT A.Col, B.Col
FROM A JOIN B ON A.Col >= B.Col
在SQL Server中,您可以使用如下内容:
;WITH cte AS (
SELECT *
FROM (VALUES
('2016-01'),('2016-02'),('2017-01'),('2018-00')
) as t(A)
), cte1 AS (
SELECT *
FROM (VALUES
('2015-00'),('2015-01'),('2017-01'),('2018-01')
) as t(B)
)
SELECT c.A,
t.B
FROM cte c
CROSS APPLY (
SELECT TOP 1 B
FROM cte1
WHERE CAST(REPLACE(c.A,'-','') as int) >= CAST(REPLACE(B,'-','') as int)
ORDER BY B DESC
) t
将输出:
A B
2016-01 2015-01
2016-02 2015-01
2017-01 2017-01
2018-00 2017-01
我们的想法是将
-
替换为零,生成像201501
这样的值,然后将它们作为int
值进行比较。这是一个自连接:从foo左侧选择*在foo.a>bar.B上连接foo作为bar。假设的问题和真实的问题完全不同。你为什么不按实际情况写出来呢。两个表。假设A列在表A中,B列在表B中。我考虑过交叉连接,但我有数百万条记录,这可能不起作用……它们只有一个表。为什么要使用交叉连接,然后将其转换为内部连接?@SeanLange My bad。。你说得对。此外,实际问题与问题对应的两个表有关