현재 고유 인덱스가없는 테이블에서 레코드를 선택하는 작업 설정이 있습니다. 이 문제는 테이블과 관련 칼럼에 색인을 붙임으로써 해결할 수 있습니다. 그러나이 시나리오에서는 테스트를 위해 인덱스를 제거한 다음 2 컬럼을 기준으로 중복을 제거해야하는 select를 수행해야합니다.sql은 3 개의 열을 선택하고 두 개의 열을 중복 제거합니다.
SELECT DISTINCT [author], [pubDate], [dateadded]
FROM [Feeds].[dbo].[socialPosts]
WHERE CAST(FLOOR(CAST(dateadded AS float)) AS datetime) >
DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE() - 2), 0)
AND CAST(FLOOR(CAST(dateadded AS float)) AS datetime) <
DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
이렇게하면 전날의 모든 기록을 선택하며 작성자와 게시자를 기준으로 기록을 삭제합니다. 게시물 선택 또는 이전에 수행 할 수 있지만 생각은 선택 내에서 완료 할 수 있는지 확인하는 것입니다.
실제로 'dateadded'를 _float_ 값으로 저장 하시겠습니까? 왜 실제 날짜/타임 스탬프 값이 아닌가? 또한 하한 경계, 상한 배타적 범위를 수행해야합니다 ('> - 2 '비트는 오프셋됩니다). 'dateadded'와 다른 컬럼 사이의 관계는 무엇입니까? - 간단한 MAX()가 사용될 수 있습니까? –
dateadded는 실제로 datetime으로 저장됩니다 ... 다른 방법으로 작업 할 수 있는지 확실하지 않았습니다 ... dateadded는 특정 레코드의 날짜이며 전날의 총 레코드를 가져와야합니다. – vbNewbie
저장된 데이터에 대해 아무 것도 할 필요가 없습니다. 이미 '정확합니다'. 캐스팅을 내버려 둡니다 (어떤 도움도 안됨). 나는 그것이 완전히 안전하다고 확신하지 못한다. 귀하의 상한선은 그대로 있어야합니다. 하한은'dateadded> = DATEADD (DAY, DATEDIFF (DAY, 0, GETDATE()) - 1, 0)'로 변경되어야합니다. –