문제

이번 주가에 대한 질문을 필터링하고 중복되는 값에는 순서를 수행할 필요는 없습니다.몇 가지 좋은 대답을 하지만 데이터의 양을 나는 가을을 느리고 가능하지 않습니다.

현재,우리의 데이터베이스에 이벤트는 값 필터링되지 않습니다.결과 중복 데이터 값(다양한 타임스탬프).우리는 프로세스는 데이터는 실행 시간에서 데이터베이스 수준에서 그것을 시간 비용이 많이 드는(과를 끌어올 수 없습니다 그것으로 코드는 데 사용되기 때문에 많이 저장되어 발동)결과에 높은 쿼리 시간.우리는 필요한 데이터 구조는 쿼리할 수 있는 데이터는 저장을 필터링하지 않도록 추가로 필터링이 필요합니다.

현재 우리의 DB

  • 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-08 04:03:47.000'
  • 'F07331E4-26EC-41B6-BEC5-002AACA58337', '0', '2008-05-08 10:02:08.000'
  • 'F07331E4-26EC-41B6-BEC5-002AACA58337', '0', '2008-05-09 10:03:24.000' (을 삭제해야이)**
  • 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-10 04:05:05.000'

우리에게 필요

  • 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-08 04:03:47.000'
  • 'F07331E4-26EC-41B6-BEC5-002AACA58337', '0', '2008-05-08 10:02:08.000'
  • 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-10 04:51:05.000'

이 사소한 것 같지만 우리의 문제는 우리가 이 데이터에서 무선 장치의 결과로 순서로 패킷와 우리의 게이트웨이는 다중쓰레드 방식을 그래서 우리가 보장 할 수 없습니다 값을 우리는 순서에 있습니다.무언가를 올 수 있습니다처럼에'1'을 4 초간 전에'0'를 2 초 동안 전지만,우리는 과정'1'이기 때문에 그것은 처음이었습니다.우리가 회전하는 우리의 머리에 구현하는 방법이다.우리는 수 없는 데이터를 비교하는 최신 값이기 때문에 데이터베이스에 최근 수 있습니다 실제로 오지 않았에서,아직 그렇게 던지는 데이터는 우리가 될 것으로 나와 우리의 시퀀스가 될 수 있습니다.그래서 현재 우리가 저장한 모든 값을 제공하고 데이터베이스를 섞고 주위에 자신을 기반으로 시간의..하지만 단위를 보낼 수 있습니다 1,1,1,0 및 유효기 때문에 이벤트는 여전히 활성화,그러나 우리는 단지를 저장할 on/off 상태(최초의 발생에 주 1,0,1,0,1,0)..우리는 생각에 대해 트리거,하지만 우리는 우리를 데이터를 때마다 주위에 새로운 값에 온 될 수 있기 때문에 이전 다음 마지막 메시지에 그것을 변경할 수 있습 전체 시퀀스(삽입 느린 것입).

어떤 아이디어가?

요청이 필요한 경우 추가 정보를 제공합니다.

[편집]PK 작업이 늘 문제는 우리의 단위는 실제로 보내에서는 서로 다른 타임 스탬프.그래서 PK 작동하지 않을 것 때문에 1,1,1 같은..그러나 다른 시간 스탬프를 이용할 수 있습니다.그럼 이벤트에 갔던 time1,이벤트도에서 time2 보내어 우리를 다시됩니다.동일한 값을 다른 시간입니다.

도움이 되었습니까?

해결책

여기에 업데이트 솔루션입니다.성능이 변화에 따라 인덱스입니다.

DECLARE @MyTable TABLE
(
  DeviceName varchar(100),
  EventTime DateTime,
  OnOff int,
  GoodForRead int
)

INSERT INTO @MyTable(DeviceName, OnOff, EventTime)
SELECT 'F07331E4-26EC-41B6-BEC5-002AACA58337', 1, '2008-05-08 04:03:47.000' 
INSERT INTO @MyTable(DeviceName, OnOff, EventTime)
SELECT 'F07331E4-26EC-41B6-BEC5-002AACA58337', 0, '2008-05-08 10:02:08.000' 
INSERT INTO @MyTable(DeviceName, OnOff, EventTime)
SELECT 'F07331E4-26EC-41B6-BEC5-002AACA58337', 0, '2008-05-09 10:03:24.000'
INSERT INTO @MyTable(DeviceName, OnOff, EventTime)
SELECT 'F07331E4-26EC-41B6-BEC5-002AACA58337', 1, '2008-05-10 04:05:05.000' 

UPDATE mt
SET GoodForRead = 
CASE
  (SELECT top 1 OnOff
   FROM @MyTable mt2
   WHERE mt2.DeviceName = mt.DeviceName
     and mt2.EventTime < mt.EventTime
   ORDER BY mt2.EventTime desc
  )
  WHEN null THEN 1
  WHEN mt.OnOff THEN 0
  ELSE 1
END
FROM @MyTable mt
    -- Limit the update to recent data
--WHERE EventTime >= DateAdd(dd, -1, GetDate())

SELECT *
FROM @MyTable

그것은 어렵지 않습니다 상상하는 필터링 솔루션을 기반으로합니다.그것은 방법에 따라 자주 당신이보고 싶은 이전 레코드에 대한 각각의 레코드(각 질문에 한 번 또는 일 동안).

다른 팁

내가 제대로 이해한다면,당신이 무엇을 하고 싶은 단순히 방지 속에서도 점점에서 데이터베이스입니다.는 경우,왜 PK(또는 유일한 지수)를 정의에 처음 두 열고있는 데이터베이스 않습니다.속 삽입 실패에 따라 PK 또는 AK 을 정의됩니다.당신은 코드(또는 저장 proc)다음해야 정상적으로 처리하는 예외는 아니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top