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