背景:我正在开发一个简单的在线测验。在用户回答了一个简单的问题后,用户就有机会通过执行小任务来提高获胜机会。
用户获得的每一批都被插入一个单独的行,所以当我需要找到一个“随机”的批次时,他们获胜的机会就会增加(如果我错了,请纠正我)。
批次表中的样本数据:
LotId ParticipantId Created
1 1 2012-11-16 12:00:00
2 2 2012-11-16 12:02:00
3 2 2012-11-16 12:06:00
4 2 2012-11-16 12:15:00
5 3 2012-11-16 12:16:00
这意味着参与者2的参与者有三个地段,因此与其他参与者相比,获胜的机会更大。
我需要做什么:当我需要画一个胜利者时,我会从拍品表中选择一个随机拍品。在此之后,我需要找到有关获胜者的信息。
目前我使用以下SELECT(对改进SELECT的任何评论都很感激),然后在我的代码中我有另一个SELECT和用户的信息。
SELECT TOP 1 LotId, ParticipantId FROM Sample_Lots WITH (NOLOCK)
WHERE
CAST(Created AS DATE) = '2012-11-16'
AND
ParticipantId NOT IN
(
SELECT ParticipantId FROM Sample_Winners WITH (NOLOCK)
WHERE
ParticipantId IS NOT NULL
AND
CAST(ThisDate AS DATE) = '2012-11-16'
)
AND
ParticipantId IN
(
SELECT ParticipantId FROM Sample_Participants WITH (NOLOCK)
WHERE
ParticipationConfirmed IS NOT NULL
)
ORDER BY NEWID()
我无法解决这个问题。我需要一个随机的批次,从这个随机批次我需要在同一个SELECT中获取用户的信息。有什么想法吗?
答案 0 :(得分:0)
假设您的用户信息在名为Participants的表中找到,其中包含ParticipantId,FirstName和LastName列,以下是使用该表的JOIN的示例:
SELECT TOP 1 sl.LotId, sl.ParticipantId, p.FirstName, p.LastName
FROM Sample_Lots sl
INNER JOIN Participants p ON sl.ParticipantId = p.ParticipantId WITH (NOLOCK)
WHERE
CAST(Created AS DATE) = '2012-11-16'
AND
sl.ParticipantId NOT IN
(
SELECT ParticipantId FROM Sample_Winners WITH (NOLOCK)
WHERE
ParticipantId IS NOT NULL
AND
CAST(ThisDate AS DATE) = '2012-11-16'
)
AND
sl.ParticipantId IN
(
SELECT ParticipantId FROM Sample_Participants WITH (NOLOCK)
WHERE
ParticipationConfirmed IS NOT NULL
)
ORDER BY NEWID()
答案 1 :(得分:0)
在第一次选择中,将Sample_Lots左连接到ParticipantId列上的Participant表。然后在第一个选择中,您还可以获得有关参与者的详细信息。结果将与原始选择具有相同的行数,并将随机排序。