Sql 选择第一个表中的所有值,仅选择第二个表中的第一个值

Sql 选择第一个表中的所有值,仅选择第二个表中的第一个值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想从代码表中的用户和使用日期的最小值中选择所有值。我该怎么做 我试过这个: SELECT u.firstName, u.lastName, u.fbId, q.dateUsed, u.codesLeft FROM Users u inner join Code q on u.Id = q.userId 但它从代码和用户表中选择所有值 另外,添加distinct不会产生任何影响 添加distinct没有效果 根据经验,DISTINCT有助于单列SELECTs。对于多个列,您需

我想从代码表中的用户和使用日期的最小值中选择所有值。我该怎么做

我试过这个:

    SELECT u.firstName, u.lastName, u.fbId, q.dateUsed, u.codesLeft
  FROM Users u
  inner join Code q on  u.Id = q.userId
但它从代码和用户表中选择所有值

另外,添加distinct不会产生任何影响

添加distinct没有效果

根据经验,
DISTINCT
有助于单列
SELECT
s。对于多个列,您需要选择“大炮”——
groupby
子句

为了实现这一点,您需要确保您选择的每个项目都是一个
groupby
列,或者具有适当的聚合功能:

SELECT u.firstName, u.lastName, u.fbId, MIN(q.dateUsed) as dateUsed, u.codesLeft
FROM Users u
INNER JOIN Code q ON u.Id = q.userId
GROUP BY u.firstName, u.lastName, u.fbId, u.codesLeft
标量子查询

SELECT u.firstName,
u.lastName,
u.fbId,
(SELECT TOP 1 dateUsed
    FROM Code as q WHERE u.Id = q.userId
    ORDER BY dateUsed ASC),
u.codesLeft
FROM Users u
或CTE

;WITH SEQ as (
SELECT userId, MIN(DateUsed) as FirstDate, MAX(DateUsed) as lastDate
FROM Code GROUP BY userID)

SELECT... u.*, q.FirstDate, q.LastDate
FROM Users as u
JOIN SEQ as q ON u.ID = q.userID

如果希望从代码表中看到更多内容,而不仅仅是日期,可以在联接中使用相关子查询:

SELECT  u.firstName, u.lastName, u.fbId, q.dateUsed, u.codesLeft,
        q.codeVal, q.ipUsed
FROM    Users u
join    Code q
    on  q.userId = u.Id
    and q.dateUsed =(
        select  Min( dateUsed )
        from    Code
        where   userID = q.userID );

什么是“第一”代码?表中的行在一般情况下是无序的,您所说的第一个代码是什么意思?最早的日期?你能添加结果和预期结果吗?