我有下面的表,我试图从表A到表B LEFT JOIN
来获得Code
和Time
。问题是我为每个代码获得多行。我想得到的是每个Code
都带有Time
的一行,这比我对GETDATE()的排序要少。
表格:
代码:
SELECT
[ID],
Date_Time
FROM Table_A
LEFT JOIN Table_B
ON A.ID = B.Project_Code
答案 0 :(得分:2)
您可以使用apply
:
select a.*, b.*
from a cross apply
(select top (1) b.*
from b
where b.code = a.code and b.time < getdate()
order by b.time desc
) b;
这假设time
实际上是datetime
。如果您只想比较时间,请使用convert(time, getdate())
。
答案 1 :(得分:0)
您需要添加一个额外的join子句以仅从指定的<addForeignKeyConstraint baseColumnNames="id"
baseTableName="profile"
constraintName="fk_profile_user_id"
referencedColumnNames="id"
referencedTableName="jhi_user"
onDelete="CASCADE"
/>
之前返回表中的记录,然后只需使用DATETIME
即可获取最新的记录:
MAX
如果列SELECT a.[ID],
Date_Time = MAX(b.Date_Time)
FROM Table_A AS a
LEFT JOIN Table_B AS b
ON b.Project_Code = a.ID
AND b.Date_Time < GETDATE()
GROUP BY a.ID;
使用Date_time
数据类型(您的示例数据表明使用了该类型,但列名表明没有使用),那么您需要将TIME
转换为时间:
GETDATE()
如果还需要从SELECT a.[ID],
Date_Time = MAX(b.Date_Time)
FROM Table_A AS a
LEFT JOIN Table_B AS b
ON b.Project_Code = a.ID
AND b.Date_Time < CONVERT(TIME, GETDATE())
GROUP BY a.ID;
返回的其他列,则将需要使用Table_B
或具有排名功能的子查询。
外部申请
OUTER APPLY
具有排名功能的子查询
SELECT a.[ID],
b.Date_Time,
b.SomeOtherColumn
FROM Table_A AS a
OUTER APPLY
( SELECT TOP 1 b.Date_Time, b.SomeOtherColumn
FROM Table_B AS b
WHERE A.ID = B.Project_Code
AND b.Date_Time < GETDATE()
ORDER BY b.Date_Time DESC
) AS b;