IAM試圖返回從表2場的行具有在值的差異的差異,而不是作爲一個SQL智者我堅持任何幫助將:-)返回兩個從SQL錶行與價值觀
TABLE A:
NAME DATA
Oscar HOME1
Jens HOME2
Will HOME1
Jeremy HOME2
Al HOME1
理解
結果,應該是2個,在數據值
NAME DATA
Oscar HOME1
Jeremy HOME2
任何差別隨機行?
IAM試圖返回從表2場的行具有在值的差異的差異,而不是作爲一個SQL智者我堅持任何幫助將:-)返回兩個從SQL錶行與價值觀
TABLE A:
NAME DATA
Oscar HOME1
Jens HOME2
Will HOME1
Jeremy HOME2
Al HOME1
理解
結果,應該是2個,在數據值
NAME DATA
Oscar HOME1
Jeremy HOME2
任何差別隨機行?
Couuld是你需要
select * from my_table a
inner join my_table b on a.data !=b.data
where a.data in (SELECT data FROM my_table ORDER BY RAND() LIMIT 1);
爲您的代碼
SELECT *
FROM [dbo].[ComputerState] as a
INNER JOIN [dbo].[ComputerState] as b ON a.ServiceName != b.ServiceName
WHERE a.ServiceName IN (
SELECT top 1 [ServiceName] FROM [dbo].[ComputerState]
);
如果真正的問題是這個簡單,你可以使用聚合如MAX()
或MIN()
抓住每一行對應一個不同DATA
:
SELECT MAX(NAME), DATA
FROM TABLE_A
GROUP BY DATA
。當然,如果有其他變量引入需求,這可能不再有效。
這是如何隨機? –
@devlincarnate好點,我讀了最重要的部分,重點是簡單地使用不同的'DATA'值。如果它必須是真正的隨機,那麼這將無法工作。 –
列'DATA'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。你知道這是什麼? – dahund
簡單的方法有隨機數據。
;with tblA as (
select name,data,
row_number() over(partition by data order by newid()) rn
from A
)
select name,data
from tblA
where rn = 1
;WITH cteA AS (
SELECT
name
,data
,ROW_NUMBER() OVER (PARTITION BY data ORDER BY NEWID()) as DataRowNumber
,ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY NEWID()) as RandomRowNumber
FROM
A
)
SELECT *
FROM
cteA
WHERe
DataRowNumber = 1
AND RandomRowNumber <= 2
它擴展了@AlexKudryashev的回答一點。
;with tblA as (
select name,data,
row_number() over(partition by data order by newid()) rn
from A
)
select name,data
from tblA
where rn = 1
與他遇到的唯一問題是,行,其中rn = 1
將在COUNT(DISTINCT data)
被信賴的號碼,這樣就可能導致超過2分的結果。要解決這個問題,可以添加一個SELECT TOP 2
子句,但它可能不完全是隨機的,因爲它將取決於SQL優化可能一致的查詢的順序結果。要真正隨機添加第二個隨機行號,並將結果限制在其中的前兩個。
更好的是,如果代碼不需要像HOME1 <> HOME2 – dahund
這樣的靜態條目什麼是你的rdbms? Sql Server,Postgres,Oracle? –
這個問題應該屬於代碼高爾夫嗎? http://codegolf.stackexchange.com/ – ebyrob