SQL Server 2008: фильтрация дублирующихся строк на основе нескольких столбцов - PullRequest
0 голосов
/ 21 декабря 2009

Спасибо всем, кто помог мне с моим последним вопросом. Это похожий вопрос, но теперь у меня есть лучшее представление о том, чего я хочу. Я снова использую MS SQL Server 2008 и пытаюсь выяснить запрос, который немного выходит за рамки моего опыта работы с SQL.

Сейчас у меня есть следующий простой запрос

SELECT pl.val, pl.txt_val, pl.id
FROM dm.labs pl
  WHERE pl.lab_nm = 'CK (CPK)' 
    AND pl.val < 999999;
    AND pl.val IS NOT NULL
ORDER BY pl.val;

В этой таблице каждая строка соответствует результатам лабораторного исследования пациента. Проблема в том, что для некоторых пациентов есть строки, которые на самом деле являются несколькими копиями одного и того же лабораторного чтения. Существует столбец pl.lab_filed_dts (тип данных datetime), в котором указана дата взятия лаборатории.

Что я хочу сделать, это:

Редактировать: если две (или более) строки имеют одинаковые id, одинаковые val и одинаковые lab_filed_dts, независимо от их значений в любом другом столбце, я хочу вернуть val, txt_val и id только из одной строки (не важно, какая из них).

Редактировать: , если две строки имеют одинаковые id, одинаковые val и ту же часть дня (но не обязательно время), равную lab_filed_dts И часть времени lab_filed_dts для одного из них полночь, я хочу вернуть val, txt_val и id из строки, у которой lab_filed_dts время не полночь.

Еще раз спасибо за помощь всем!

1 Ответ

1 голос
/ 21 декабря 2009

Если я правильно понимаю ваш вопрос:

SELECT pl.val, pl.txt_val, pl.id
FROM dm.labs pl
  WHERE pl.lab_nm = 'CK (CPK)' 
    AND pl.val < 999999;
    AND pl.val IS NOT NULL
GROUP BY  pl.val, pl.txt_val, pl.id, cast(lab_filed_dts as date)
HAVING lab_filed_dts =  max(lab_filed_dts)
ORDER BY pl.val;  

/ * изменено pl.vak на pl.val, так как вы не можете заказать столбец, отсутствующий в select, и я предположил, что это был просто тип * /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...