SQL Query从日期时间字段的表基础更新列

时间:2018-03-15 12:10:53

标签: sql sql-server

我有2个名为tblSetting和tblPaquets的表。 我需要在使用tblPaquest和tblSetting的datetime字段的where子句的tblSetting基础上更新tblPaquets的3个字段。

  

下面的sql代表我要做的事情,我知道现在没有意义。

我的目标是实现一个目标。

我需要从像这样的tblSettings中提取数据

SELECT TOP(1) [SupplierID],[MillID],[GradeFamilyID] FROM [tblSettings]
WHERE [DateHeure] <= [tblPaquets].[DateHeure]
ORDER BY [DateHeure] DESC

使用此数据更新tblPaquets

UPDATE [tblPaquets]
SET( [SupplierID] = PREVIOUS_SELECT.[SupplierID]
     [MillID] = PREVIOUS_SELECT.[MillID]
     [GradeFamilly] = PREVIOUS_SELECT.[GradeFamilyID] )

这里是表格设计

CREATE TABLE [tblSettings](
    [ID] [int] NOT NULL,
    [SupplierID] [int] NOT NULL,
    [MillID] [int] NOT NULL,
    [GradeID] [int] NOT NULL,
    [TypeID] [int] NOT NULL,
    [GradeFamilyID] [int] NOT NULL,
    [DateHeure] [datetime] NOT NULL,
    [PeakWetEnable] [tinyint] NULL)

CREATE TABLE [tblPaquets](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [PaquetID] [int] NOT NULL,
    [DateHeure] [datetime] NULL,
    [BarreCode] [int] NULL,
    [Grade] [tinyint] NULL,
    [SupplierID] [int] NULL,
    [MillID] [int] NULL,
    [AutologSort] [tinyint] NULL,
    [GradeFamilly] [int] NULL)

1 个答案:

答案 0 :(得分:0)

您可以使用CROSS APPLY

执行此操作
UPDATE p
    SET SupplierID = s.SupplierID,
        MillID = s.MillID
        GradeFamilly = s.GradeFamilyID
    FROM tblPaquets p CROSS APPLY
         (SELECT TOP (1) s.*
          FROM tblSettings s
          WHERE s.DateHeure <= p.DateHeure
          ORDER BY p.DateHeure DESC
         ) s;

注意:

  • SET之前没有括号。
  • 除非需要转义标识符,否则我建议不要使用[]来转义标识符。
  • 我认为tblSettings上的查询应该有一个ORDER BY来获取最新的行。