Hi,
I'm trying to create a view or TSQL statement to return in one recordset...
a) the most recent record of a PK in table1 [foodRecipes]
b) the most recent record (if exists) of FK from table 1 with the PK from table2
Goal: Each recipe can have many versions, and each version can have many historical attempts at making cookies...
example:
table 1: foodRecipes (PK = foodGroup + recipeName + recipeDateModified)
foodGroup [nvarchar (50)]
recipeName [nvarchar (50]
recipeDateModified [datetime]
cupsOfSugar [float]
sampleData:
cookies, peanutButter, 3/3/2007, 1.5
cookies, peanutButter, 3/4/2007, 2.0
cookies, sugar, 3/3/2007, 5.0
table 2: foodRecipeHistory (PK = foodGroup + recipeName + recipeDateModified + historyDateModified)
foodGroup [nvarchar (50)] ...FK from table1
recipeName [nvarchar (50] ...FK from table1
recipeDateModified [datetime] ...FK from table1
historyDateModified [datetime]
cupsOfSugarHistory [float]
sampleData:
cookies, peanutButter, 3/3/2007, 3/3/2007 10:15:00 AM, 1.5
cookies, peanutButter, 3/4/2007, 3/4/2007 10:20:00 AM, 2.0
cookies, peanutButter, 3/4/2007, 3/4/2007 10:21:00 AM, 2.2
What I want: the view or TSQL should provide the most recent unique recipes data + the most recent history (if exists, otherwise NULL)
SELECT * FROM myRecipies
sample Resultset:
foodGroup, recipeName, recipeDateModified, cupsOfSugar, historyDateModified, cupsOfSugarHistory
cookies, peanutButter, 3/4/2007, 2.0, 2.2
cookies, sugar, 3/3/2007, 5.0, <NULL>
What I've got now:
1. TSQL that gives me back the most recent recipes (No History yet)
SELECT foodGroup, recipeName, recipeDateModified, cupsOfSugar, CONVERT(nvarchar(30), recipeDateModified, 9) AS strModifiedDate
FROM dbo.foodRecipes oher
WHERE (CONVERT(nvarchar(30), recipeDateModified, 9) IN
(SELECT MAX(CONVERT(nvarchar(30), recipeDateModified, 9))
FROM dbo.foodRecipes
WHERE foodGroup= oher.foodGroupAND recipeName = oher.recipeName))
...and this works great, I get back each unique recipe from table #1, the most recent...
anyone good at this?
thanks in advance,
bsierad
You must have a sweet tooth if your only ingredient is CupsOfSugar.... ;)
Anyway, try the query below to see if this is what you're after.
Chris
SELECT foodGroup,
recipeName,
recipeDateModified,
cupsOfSugar,
CONVERT(nvarchar(30), recipeDateModified, 9) AS strModifiedDate,
(SELECT TOP 1 frh.cupsOfSugarHistory
FROM dbo.foodRecipeHistory frh
WHERE frh.foodGroup = oher.foodGroup
AND frh.recipeName = oher.recipeName
AND frh.recipeDateModified = oher.recipeDateModified
ORDER BY frh.historyDateModified DESC) AS cupsOfSugarHistory
FROM dbo.foodRecipes oher
WHERE (CONVERT(nvarchar(30), recipeDateModified, 9) IN
|||(SELECT MAX(CONVERT(nvarchar(30), recipeDateModified, 9))
FROM dbo.foodRecipes
WHERE foodGroup= oher.foodGroupAND recipeName = oher.recipeName))
Thanks!
Works great...and I can soak this in and apply it in other areas...
My real fields don't taste this good...machineGasFlow sounds pretty boring...
Can't thank you enough,
bsierad
No comments:
Post a Comment