2016-10-05 105 views
1

假設我有一個兩列的表格。事實上,它將在兩個不同的表中,但讓它簡單的讓我們使用一張表。我只是想知道我怎麼能解決這個問題我需要此問題的幫助

 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-022015-01
  • 2017-012017-01
  • 2018-002017-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

+0

這是一個自加入:'select * from foo left join foo AS bar on foo.A> bar.B' –

+1

假設的問題和真正的問題是完全不同的。 – Strawberry

+1

你爲什麼不把它寫成真正的樣子。兩張桌子。 – Drew

回答

-1

使用2頁不同的表

SELECT A.Col, B.Col 
FROM A JOIN B ON A.Col >= B.Col 
+0

他們只有1個表。爲什麼你會使用交叉連接,然後把它變成內部連接? –

+0

交叉連接可能無法正常工作,因爲我有數百萬條記錄.. – tita

+0

@SeanLange我的壞..你是正確的加入。另外,根據問題,實際問題與2個表相關 – Akash

0

SQL服務器你可以用這樣的東西:

;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值替換-