--===== Identify a "safe" place to "play"
USE TempDB
GO
--===== Create the test tables
CREATE TABLE dbo.HistoricalLabData
(
ID INT,
TestDate DATETIME,
Department VARCHAR(50),
Test VARCHAR(100),
Result VARCHAR(20)
)
CREATE TABLE dbo.LabData
(
ID INT,
TestDate DATETIME,
Department VARCHAR(50),
Test VARCHAR(100),
Result VARCHAR(20)
)
--===== Populate the test tables
INSERT INTO HistoricalLabData
(ID,TestDate,Department,Test,Result)
SELECT '1234','04/01/2009','Chemistry' ,'Glucose','75' UNION ALL
SELECT '1234','01/01/2009','Chemistry' ,'Sodium' ,'130' UNION ALL
SELECT '1234','04/01/2009','Hematology','WBC' ,'7.50' UNION ALL
SELECT '1234','01/01/2009','Hematology','HGB' ,'10.0' UNION ALL
SELECT '5678','05/01/2009','Chemistry' ,'Glucose','82' UNION ALL
SELECT '5678','02/01/2009','Chemistry' ,'AST' ,'25' UNION ALL
SELECT '5678','05/01/2009','Hematology','HCT' ,'33.0'
INSERT INTO LabData
(ID,TestDate,Department,Test,Result)
SELECT '1234','01/01/2009','Chemistry' ,'Glucose','75' UNION ALL
SELECT '1234','04/01/2009','Chemistry' ,'Sodium' ,'130' UNION ALL
SELECT '1234','01/01/2009','Hematology','WBC' ,'7.50' UNION ALL
SELECT '1234','04/01/2009','Hematology','HGB' ,'10.0' UNION ALL
SELECT '5678','02/01/2009','Chemistry' ,'Glucose','82' UNION ALL
SELECT '5678','05/01/2009','Chemistry' ,'AST' ,'25' UNION ALL
SELECT '5678','02/01/2009','Hematology','HCT' ,'33.0'
GO
CREATE VIEW dbo.LatestLabData AS
WITH cteAllData AS
(--==== Numbers the rows in a way that will make it e asy to pick only the latest rows
SELECT ROW_NUMBER() OVER (PARTITION BY ID,Department,Test ORDER BY TestDate DESC) AS RowNum,
d.*
FROM (--==== Combines all of the rows from both tables so we can pick the latest rows
SELECT *
FROM dbo.HistoricalLabData
UNION ALL
SELECT *
FROM dbo.LabData
)d
)--==== Pick only the latest rows
SELECT ID,TestDate,Department,Test,Result
FROM cteAllData
WHERE RowNum = 1
GO
--===== Show all the latest rows in order by ID, Dep artment, Test
SELECT *
FROM dbo.LatestLabData
ORDER BY ID, Department, Test
--===== Show all the latest rows from the Chemistry department
-- in order by ID, Department, Test
SELECT *
FROM dbo.LatestLabData
WHERE Department = 'Chemistry'
ORDER BY ID, Department, Test
--===== Show all the latest rows for the Glucose tes t
-- in order by ID, Department, Test
SELECT *
FROM dbo.LatestLabData
WHERE Test = 'Glucose'
ORDER BY ID, Department, Test
--===== Show all the latest rows for ID 1234
-- in order by ID, Department, Test
SELECT *
FROM dbo.LatestLabData
WHERE ID = 1234
ORDER BY ID, Department, Test
__________________
--Jeff Moden
|