2016-09-29 1 views
0

Ich habe eine Tabelle, die verfügbaren Termine für einige Mitarbeiter mit zwei Feldern - StaffID und Datum Informationen, die aussieht: ein `Wie zufällig ausgewählte Werte gelten für verschiedene Termine in SQL Server

staffid  date 
1   2016-01-01 
1   2016-01-02 
1   2016-01-03 
2   2016-01-03 
3   2016-01-01 
3   2016-01-03 

Ich brauche zu generieren Liste der verfügbaren DISTINCT-Daten aus dieser Tabelle, in denen die für jedes Datum ausgewählten Mitarbeiter nach dem Zufallsprinzip ausgewählt werden. Ich weiß, wie man Zeilen basierend auf einem bestimmten Feld auswählt (siehe zum Beispiel die Antwort here, aber dies wird immer die Zeilen basierend auf einer gegebenen Reihenfolge in der Tabelle auswählen (also zum Beispiel Personal 1 für den 1. Januar, während ich eine Auswahl treffen muss) .. werden zufällig so manchmal wird 1 als eindeutige Reihe ausgewählt werden und manchmal Mitarbeiter 3 werden ausgewählt

Das Ergebnis nach Datum geordnet werden muss

+2

Mögliches Duplikat von [How eine zufällige Zeile in SQL anfordern?] (http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql) –

+0

Die Frage ist nicht über die Auswahl einer zufälligen Zeile, es geht es darum, eine zufällige DISTINCT-Zeile auszuwählen. – user1480192

+0

so das mögliche Duplikat ist vielleicht der erste Hinweis, auf dem man gehen kann – swe

Antwort

0

Versuchen sie folgendes:

-- test data 
create table your_table (staffid int, [date] date); 
insert into your_table values 
(1,  '2016-01-01'), 
(1,  '2016-01-02'), 
(1,  '2016-01-03'), 
(2,  '2016-01-03'), 
(3,  '2016-01-01'), 
(3,  '2016-01-03'); 

-- query 
select * 
from (
    select distinct [date] [distinct_date] from your_table 
) as d 
outer apply (
    select top 1 staffid 
    from your_table 
    where d.[distinct_date] = [date] 
    order by newid() 
) as x 

-- result 1 
distinct_date staffid 
----------------------- 
2016-01-01  3 
2016-01-02  1 
2016-01-03  1 

-- result 2 
distinct_date staffid 
----------------------- 
2016-01-01  1 
2016-01-02  1 
2016-01-03  2 

hoffe, es hilft :)

Verwandte Themen