我有一个Users表和一个Payments表。我需要一个查询,其中列出了在PaymentStatus = 1的付款表中有记录的用户。
它还必须仅列出具有特定GroupID的用户。 GroupID将由变量传递,但为简单起见,我们可以将其称为5。
记录的时间戳(TimeCompleted)也必须小于设定的时间戳,但我们可以称之为10。
这些是表格中的列(简化):
Users: UserID, GroupID, UserName
Payments: PaymentID, UserID, PaymentStatus, TimeCompleted
查询应选择字段UserName。
几个小时前我确实问了一个类似的问题,但我说错了,我无法让我的查询正常工作。此外 - 如果用户有多个有效和有效付款,则只能返回一次UserName。当我尝试这样做时,我无法做到这一点。如果您愿意,可以改进我当前的查询(除了最后一个关于复制返回用户的问题之外,它还可以完成所有操作)。我可能会完全错误地说:
SELECT `Users`.`UserName`
FROM `Users`
LEFT OUTER JOIN `Payments` ON `Users`.`UserID` = `Payments`.`UserID`
WHERE `Payments`.`TimeCompleted` < 10
AND `Payments`.`PaymentStatus` = 1
AND `Users`.`GroupID` = 5
答案 0 :(得分:1)
您希望使用UserId键连接两个表。 group by子句将限制为不同的用户名:
select UserName
from Users inner join Payments on (Users.UserID = Payments.UserID)
where PaymentStatus = 1 and GroupID = 5 and TimeCompleted < 10 group by Users.UserID;
答案 1 :(得分:0)
查询将如下所示:SELECT * FROM Users U.GroupId = 5 WHERE U. U.UserId IN(SELECT P.PserMENTS P WHERE P.PaymentCompleted = 1 AND P.TimeStamp&lt; = @DateVar)
答案 2 :(得分:0)
select *
from users uu
join payments p on p.userid=uu.userid
where p.paymentcompleted=1 and uu.groupId=5