2014-05-21 34 views
1

我一直在敲我的腦袋,試圖寫一個SQL查詢,它將返回重複中獎彩票號碼。將返回重複彩票號碼的SQL查詢

我有一個名爲WinningLotteryNumbers的SQL表和一個名爲WinningNumbers的列,數據類型爲vchar(14)。我以這種格式存儲WinningNumber:01-02-03-04-05

我的問題是這樣的,例如我有一個存儲在欄中的贏取號碼爲02-04-06-08-10。這5個數字是幸運的,並在幾天後再次被吸引,但是以不同的順序,即06-02-10-08-04。如何查詢列並獲取所有相同但以不同順序的WinningNumbers的返回值。

我希望我的問題如我在自己的頭上那樣明確。預先感謝任何幫助!

+0

如何確定您想要搜索的「WinningNumber」是否包含整列? –

+0

每個WinningNumber都有一個WinningNumberId –

+1

順序是否意味着他們不同? IOW,'01-02-03-04-05'與'05 -04-03-02-01'一樣,都是「贏家」?如果是這樣,只要確保在將它們存儲在首位之前對它們進行排序。如果不是,那麼你不需要對它們進行計數,因爲它們不是相同的數字。 –

回答

3

這是一種痛苦。讓我建議這種方法:

select newWLN, count(*) as cnt 
from (select LotteryNumber, group_concat(numpart order by numpart separator '-') as NewWLN 
     from (select wln.LotteryNumber, 
        substring_index(substring_index(wln.LotteryNumber, '-', n.n), '-', -1) as numpart 
      from WinningLotteryNumbers wln cross join 
       (select 1 as n union all select 2 union all select 3 union all select 4 union all select 5 
       ) n 
      ) wln 
     group by LotteryNumber 
    ) nwln 
group by newWLN 
having count(*) > 1 
order by count(*) desc; 

這是一個蠻力的方法。它將彩票號碼分成每個彩票號碼的五個組成部分。然後按順序重組它們。最後一步是聚合來計算重複項。

+3

+1漂亮:) http://www.sqlfiddle.com/#!2/ed578/3 – mellamokb

+0

哇。你把它釘在我頭上。感謝您花時間感謝您! –

1

這只是一個想法。您可以拆分所有數字,按升序對其進行排序,然後再次存儲在變量中。

然後,02-04-06-08-10將與06-02-10-08-04一樣,一旦你排序的數字。

我希望這有助於