use*_*009 0 sql-server cross-apply
我有Car车ID的表(smallint)和另一张表与每辆车相关的事件.
现在我想获得按特定标准选择的汽车的最新活动,但这似乎不起作用.
当我有这样的查询来获取每辆车的最新事件时,它可以正常工作:
SELECT * FROM [dvm_data].[dbo].[Car] CD
CROSS APPLY (
SELECT TOP 1 * FROM [dvm_data].[dbo].[CarData] WHERE CarIndex = CD.ID) MD
Run Code Online (Sandbox Code Playgroud)
在另一方面,当我尝试使用限制汽车WHERE在第一SELECT,它不再起作用:
SELECT * FROM [dvm_data].[dbo].[Car] WHERE ID > 100 CD
CROSS APPLY (
SELECT TOP 1 * FROM [dvm_data].[dbo].[CarData] WHERE CarIndex = CD.ID) MD
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到错误消息:
消息102,级别15,状态1,行1'CD'附近的语法不正确.消息102,级别15,状态1,行3'MD'附近的语法不正确.
第一个查询本身工作正常:
SELECT * FROM [dvm_data].[dbo].[Car] WHERE ID > 100
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?通常使用的例子CROSS APPLY没有WHERE在第一SELECT查询,这是否意味着什么?
另一件事,如果我想DISTINCT在第一次查询中使用,找到具有某种类型事件的汽车,然后找到这些汽车的最新事件.它会是这样的,但这也行不通:
SELECT DISTINCT ID FROM [dvm_data].[dbo].[CarData] WHERE EventID = 32 CD
CROSS APPLY (
SELECT TOP 1 * FROM [dvm_data].[dbo].[CarData] WHERE CarIndex = CD.ID) MD
Run Code Online (Sandbox Code Playgroud)
我想这应该很容易,但目前我遗漏了一些东西......
你的where子句位置错误!试试这个:
SELECT * FROM [dvm_data].[dbo].[Car] CD
CROSS APPLY (
SELECT TOP 1 *
FROM [dvm_data].[dbo].[CarData]
WHERE CarIndex = CD.ID
) MD
WHERE CD.ID > 100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |