-1

我有几个表,我写了一个 sql 来连接这些表并将结果插入到最终表中。最终表是 tb(account, date),account 是主键。问题来自查询结果,如下所示:

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

谢谢。

4

3 回答 3

2

怎么样

INSERT INTO SomeOtherTable (account, DATE)
SELECT account,
MAX(date)
FROM YourTable
GROUP BY account

如果您要向我们展示表模式、原始查询和一些示例数据,那会更有意义。

于 2012-09-25T18:01:18.660 回答
0

您可以在查询中添加DISTINCTGROUP 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)一点。

于 2012-09-25T18:00:38.220 回答
-1

我认为您ORDER BY date DESC GROUP BY account在插入时需要这样做。但是,如果表中已经有 0001,则仅此一项将不起作用。

您需要插入不存在的记录,然后更新现有记录(如果这是您想要的)

于 2012-09-25T18:02:55.180 回答