2017-10-03 18 views
0

から重複データを避けるため、私は私の紺碧のテーブルにそこからデータを挿入したいが、重複データを避けること。私は時々、それはない、データ自体は時々重複したデータを持っていることを知っているが、私はまた私のクエリを疑います。したがって、私は、重複データがさえAPIデータが頻繁に更新され、私のテーブルの中に押し込まれていないことを確認するために解決策を探しています。SQLは - 私は外部のREST API(<a href="https://api.bitfinex.com/v1/lendbook/usd" rel="nofollow noreferrer">https://api.bitfinex.com/v1/lendbook/usd</a>)を持っている外部のREST API

enter image description here

答えて

0

時間後:これは私のテーブルの定義は

insert(row: object): any { 
    const sql = ` 
     IF NOT EXISTS (
     SELECT 1 
     FROM dbo.lendbook d WITH (HOLDLOCK) 
     WHERE d.rate = @rate 
       AND d.amount = @amount 
       AND d.period = @period 
       AND d.timestamp = @timestamp 
       AND d.type = @type 
       AND d.frr = @frr 
    ) 
     BEGIN 
     INSERT dbo.lendbook 
      (rate, amount, period, timestamp, type, frr) 
     VALUES 
      (@rate, @amount, @period, @timestamp, @type, @frr) 
     END 
    `; 
    const ps = new mssql.PreparedStatement(this.db); 
    ps.input('rate', mssql.Float); 
    ps.input('amount', mssql.Float); 
    ps.input('period', mssql.Int); 
    ps.input('timestamp', mssql.DateTime); 
    ps.input('type', mssql.NVarChar); 
    ps.input('frr', mssql.NVarChar); 

    ps.prepare(sql, (err: any) => { 
     if (err) { 
     LendbookService.LOGGER.error('MSSQL prepare error', err); 
     } 
     else { 
     ps.execute(row, (err: any) => { 
      if (err) { 
      LendbookService.LOGGER.error('MSSQL execute error', err); 
      } 
      ps.unprepare((err: any) => { 
      if (err) { 
       LendbookService.LOGGER.error('MSSQL unprepare error', err); 
      } 
      }); 
     }); 
     } 
    }); 
    return ps; 
    } 

である:以下

は、データを挿入するノード-MSSQLを使用して私のコードで、コア事はクエリです研究とテストをすることで、私はそれを理解しました。残りのAPIからの挿入データ以下のクエリは、データベースに私のテーブルにプッシュする前に(すべての列に同じ値を持つ)、絶対重複をフィルタリングします。同じ状況で誰かを助けてくれることを願っています。

const sql = ` 
     INSERT dbo.lendbook 
     (rate, amount, period, timestamp, type, frr) 
     VALUES 
     (@rate, @amount, @period, @timestamp, @type, @frr) 

     ;WITH cte 
     AS (SELECT ROW_NUMBER() OVER (PARTITION BY rate, amount, period, timestamp, type, frr 
      ORDER BY (SELECT 0)) RN 
      FROM dbo.lendbook) 
     DELETE FROM cte 
     WHERE RN > 1; 
    `; 
関連する問題