我正在使用SQL Server数据库来跟踪制造环境中的各种生产情况。该数据库有两个表:
我想查询生产中的所有案例 AND 过去两天内已完成或取消 的所有案例 。在日志中,我有一个datetime列和一个特定于取消或完成案例的代码。我假设查询可能JOIN
来自日志的任何具有这些代码中的任何一个并且具有在现在之前48小时内的日期时间的情况。但我不太清楚该怎么做。我的查询的第一部分(用于获取生产中的案例)如下:
SELECT * FROM test.dbo.status WHERE status > 0
非常感谢任何帮助。提前谢谢!
的更新 的 澄清一下,有两件事:
表格结构:
CREATE TABLE [dbo].[status](
[serial] [varchar](10) NOT NULL,
[type] [varchar](50) NULL,
[commit_date] [date] NULL,
[sent_to_prod] [date] NULL,
[target] [date] NULL,
[sent_to_mfg] [date] NULL,
[status] [int] NULL,
[notes] [bit] NULL,
[hold] [bit] NULL,
[canceled] [bit] NULL,
[priority] [bit] NULL,
[vendors] [varchar](150) NULL,
[rework] [varchar](50) NULL,
[created_on] [datetime] NULL,
[modified_on] [datetime] NULL
)
CREATE TABLE [dbo].[log](
[serial] [varchar](13) NOT NULL,
[action] [varchar](200) NOT NULL,
[who] [varchar](80) NOT NULL,
[time] [datetime] NOT NULL,
[code] [varchar](20) NOT NULL
)
答案 0 :(得分:2)
鉴于你没有提供任何结构,我会从类似的东西开始。
查询1:返回的记录数将是LogTable匹配记录的数量
SELECT StatusTable.ID, LogTable.When, etc etc etc.
FROM StatusTable INNER JOIN LogTable
ON StatusTable.ID = LogTable.ID
WHERE StatusTable.status > 0
OR (LogTable.WhatCode = 97 --Assumes 97 is your desired code.
AND LogTable.When >= dateadd(hh, -48, GetDate()))
<强>加强>
查询2:使用子查询而不是联接从LogTable获取所需的ID。 (您还可以查看EXISTS
运算符,而不是IN
)
SELECT StatusTable.ID, StatusTable.otherField, etc etc
FROM StatusTable
WHERE StatusTable.status > 0
OR StatusTable.ID IN (SELECT LogTable.ID FROM LogTable WHERE LogTable.WhatCode = 97 --Assumes 97 is your desired code.
AND LogTable.When >= dateadd(hh, -48, GetDate()))