0

已经为此工作了几个小时,这让我发疯了。通常我只需要从一个表中执行简单的 MS SQL 操作,但现在我需要来自 2 的数据并且迷路了。

数据库名称:事件
表名称: FeedUpdate 和 Fixture

Feed 更新字段:
[EventId] ,[Description] ,[DataProviderId] ,[UpdateTimestamp]

夹具字段:
[FixtureId]、[Description]、[DataProviderId]、[StartTime]

到目前为止我一直在尝试的查询:

SELECT [FixtureId],[Description] ,[DataProviderId] ,[StartTime]
FROM [Event].[dbo].[Fixture]
WHERE [DataProviderId] = '6' AND StartTime >= '2013-03-05 00:00:00.0000000'
  AND StartTime <= '2013-03-05 00:30:00.0000000'

  UNION ALL

SELECT [EventId] ,[Description] ,[DataProviderId] ,[UpdateTimestamp]
FROM [Event].[dbo].[FeedUpdate]
WHERE [DataProviderId] = '6' AND UpdateTimestamp
  BETWEEN '2013-03-05 00:00:00.0000000' AND '2013-03-05 00:01:00.0000000'

我希望将这些信息放在一个表视图中,按 FixtureId/EventId 分组,因为它们都是相同的,只是名称不同。我还想要每个 FixtureId/EventId 一行,因为“FeedUpdate”表有多个相同 EventId 的条目

任何指针都会很棒

4

2 回答 2

0

从您的问题中不清楚当您有多行具有相同 ID 时您想要什么结果,所以我猜测“最新”信息。此外,您使用两个不同的日期范围进行操作。我暂时忽略了这一点,但我认为它们可能应该是相同的范围。

可能的解决方案: 1) 像今天一样创建一个联合,但使用“as”来确保两个语句的输出具有相同的字段名称。

然后从该联合中为每个具有最大时间戳的“id”选择条目。

2)您可以通过使用几个公用表表达式来改进这一点,第一个列出每个更新的最新版本,第二个列出更新中尚未返回的条目,最后选择这两个的输出按事件 ID 或时间戳排序的 CTE。

3)或者,你可以用临时表和更新来解决这个问题。

像这样的东西:

DECLARE @events table (
    EventId int primary key,
    Description varchar(max),
    DataProviderId int,
    [timestamp] datetime
)
INSERT @events (EventId, Description, DataProviderId, [Timestamp])
  SELECT [FixtureId], [Description], [DataProviderId], [StartTime]
    FROM [Event].[dbo].[Fixture]
      WHERE [DataProviderId] = '6' AND StartTime >= '2013-03-05 00:00:00.0000000'
        AND StartTime <= '2013-03-05 00:30:00.0000000'

UPDATE @events
SET [Description]=u.[Description], 
    [DataProviderId]=u.[DataProviderId], [Timestamp]=u.[UpdateTimestamp]
  FROM @events e
    inner join [Event].[dbo].[FeedUpdate] u on e.EventId = u.EventId
      where u.[DataProviderId] = '6' AND u.UpdateTimestamp
      BETWEEN '2013-03-05 00:00:00.0000000' AND '2013-03-05 00:01:00.0000000'
于 2013-03-07T13:06:10.150 回答
0

您的列名需要匹配 - 您有两个不同的,一个 EventId 和另一个 FixtureId。

使用 AS 分配相同的列名:

[FixtureId] AS [FieldId]
...
[EventId] AS [FieldId]

此外,您的日期字段不匹配。

于 2013-03-07T12:46:54.200 回答