MSSQL存储过程帮助比较日期

时间:2018-07-23 15:50:58

标签: sql-server

我以前从未写过存储过程。我正在使用SSMS 2014,并且尝试基于日期比较插入记录。

从本质上讲。我想获取表 B 中的 MAX 日期。我想将其存储在某个地方,然后只插入日期为>大于表B的最大日期的表 A 中的记录。我使用错误的方法吗?我收到错误消息:除非在HAVING子句或选择列表中包含的子查询中,否则聚合不能出现在ON子句中,并且正在聚合的列是外部引用。

BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * FROM dbo.Table1 A
    INNER JOIN dbo.Table2 B
    ON CONVERT(VARCHAR, A.LastDate, 101) > CONVERT(VARCHAR, MAX(B.LastDate), 101)

END

3 个答案:

答案 0 :(得分:2)

由于没有太多的细节,所以这里有很多猜测,但是也许您正在寻找类似的东西?您很有可能需要关联子查询,但实际上不确定您的需求是什么。

SELECT * 
FROM dbo.Table1 A
where A.LastDate >
(
    select max(B.LastDate)
    from dbo.Table2 B
)

答案 1 :(得分:2)

由于您只希望如{em>所述,只插入TableA中的列,而只插入日期为>大于表B的最大日期的表A ,因此可以在联接中使用派生表。

SELECT A.* 
FROM dbo.Table1 A
INNER JOIN (select max(LastDate) DT from  dbo.Table2) b
ON A.LastDate > b.DT

或者在一个WHERE子句中,这样会更快。

SELECT A.* 
FROM dbo.Table1 A
WHERE A.LastDate > (select max(LastDate) DT from dbo.Table2)

答案 2 :(得分:2)

您可以实现以下目标:

如果您需要插入数据,则可以使用#

直接插入
Select ... Insert