我有几个表,我写了一个sql来连接这些表并将结果插入到最终表中。最终表是tb(帐号,日期),帐号是主键。问题来自查询结果,如下所示:
account date
0001 09/01/2012
0001 09/02/2012
0002 09/01/2012
0003 09/03/2012
当我在这些结果记录上面插入时,我违反了PRIMARY KEY约束错误。如何修复查询,我可以得到如下结果记录
account date
0001 09/02/2012 (get the latest date)
0002 09/01/2012
0003 09/03/2012
感谢。
答案 0 :(得分:2)
怎么样
INSERT INTO SomeOtherTable (account, DATE)
SELECT account,
MAX(date)
FROM YourTable
GROUP BY account
如果要向我们展示表模式,原始查询和soem示例数据,那将更有意义。
答案 1 :(得分:0)
您可以在查询中添加DISTINCT
或GROUP BY
以防止重复。如果最终表格在此填充之前已经有一些数据,您可能还想添加相关的NOT EXISTS
。例如:
INSERT dbo.FinalTable(account, [date])
SELECT account, [date] FROM
(
SELECT account, MAX([date])
FROM --... your join here
GROUP BY account
) AS src (account, [date])
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.FinalTable
WHERE account = src.account
AND [date] = src.[date]
);
另请考虑为date
列使用更有意义(且非保留)的字词。
编辑抱歉,错过了(get the latest date)
位。
答案 2 :(得分:-1)
我认为插入时需要ORDER BY date DESC GROUP BY account
。但是,如果你已经在表格中有0001,那么仅此一项将不起作用。
您需要插入不存在的记录,然后更新现有记录(如果这是您想要的)