Monday, March 19, 2012
Get Value from CURSOR
My question is, how do I get the value out of the Cursor? There's only one field.
Declare @.Day as int
Declare @.Plant as varchar(30)
SET NOCOUNT ON
CREATE Table #Temp (Facility varchar(30), ProductCategory nvarchar(3), Target int, Quantity int, Percentage decimal(10,2), Production_Date smalldatetime,As_Of_Time smalldatetime)
Declare Facility_Cursor CURSOR
For Select Distinct(Facility) From ProductionHistory
OPEN Facility_CURSOR
Declare @.Facility_Cursor as sysname
FETCH NEXT From Facility_CURSOR into @.Facility_Cursor
WHILE @.@.FETCHSTATUS = 1
--YESTERDAY
Set @.Day = -2
Insert Into #Temp
exec sp_GetDailyProductionByPlantAndCategory @.Day, @.Facility, 'NAP'
--TODAY
SET @.Day = -1
Insert Into #Temp
exec sp_GetDailyProductionByPlantAndCategory @.Day, @.Facility, 'NAP'
FETCH NEXT FROM Facility_CURSOR into @.Facility_Cursor
CLOSE Facility_Cursor
DEALLOCATE Facility_CURSOR
SET NOCOUNT OFF
Select * From #Temp ORDER BY Production_Date, Facility, ProductCategory DESCI see that you are trying to pass a variable "@.Facility" to your sproc without defining it, and the results of the cursor are being placed into @.Facility_Cursor. If you change the variable declaration to @.Facility and then FETCH NEXT From Facility_CURSOR into @.Facility it just might work!|||That did the trick. I knew it was something simple. Thanks!
Wednesday, March 7, 2012
Get the closest date
I need help in writing a SQL statement in MS SQL Server 2000 to select
the latest date (i.e., the date closest to or equal to the current date)
for a given date.
For example, in a table I have the following records:
Date Exchange-Rate
01/Sep/03 0.55
05/Sep/03 0.59
If the given date is 02/Sep/03, then the rate 0.55 should be return.
If the given date is 03/Sep/03, then the rate 0.55 should be return.
If the given date is 04/Sep/03, then the rate 0.59 should be return.
Thanks in advanced,
Benny
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!Benny Chow (benny@.stg.net.nz) writes:
> I need help in writing a SQL statement in MS SQL Server 2000 to select
> the latest date (i.e., the date closest to or equal to the current date)
> for a given date.
> For example, in a table I have the following records:
> Date Exchange-Rate
> 01/Sep/03 0.55
> 05/Sep/03 0.59
> If the given date is 02/Sep/03, then the rate 0.55 should be return.
> If the given date is 03/Sep/03, then the rate 0.55 should be return.
> If the given date is 04/Sep/03, then the rate 0.59 should be return.
Next time, please include CREATE TABLE statements for the tables you
are working with and INSERT statements with sample data. This makes it
possible to post a tested solution.
Thus, this solution is untested:
SELECT exchangerage, date
FROM rates
WHERE date = (SELECT MAX(date)
FROM rates
WHERE date <= @.date)
--
Erland Sommarskog, SQL Server MVP, sommar@.algonet.se
Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techin.../2000/books.asp|||CREATE TABLE ExchangeRates (rdate DATETIME PRIMARY KEY, exchangerate
DECIMAL(10,2) NOT NULL)
INSERT INTO ExchangeRates VALUES ('20030901',0.55)
INSERT INTO ExchangeRates VALUES ('20030905',0.59)
DECLARE @.dt DATETIME
SET @.dt = '20030902'
Here's one method:
SELECT exchangerate
FROM ExchangeRates
WHERE rdate =
(SELECT MIN(rdate)
FROM ExchangeRates
WHERE ABS(DATEDIFF(DAY,@.dt,rdate))=
(SELECT MIN(ABS(DATEDIFF(DAY,@.dt,rdate)))
FROM ExchangeRates))
Or you can use TOP:
SELECT TOP 1 exchangerate
FROM ExchangeRates
ORDER BY ABS(DATEDIFF(DAY,@.dt,rdate)), rdate
Personally, I would avoid TOP because it's a MS proprietary extension to
SQL.
--
David Portas
----
Please reply only to the newsgroup
--|||Benny wants the closest, before or after the specified date according to his
example.
--
David Portas
----
Please reply only to the newsgroup
--|||Thanks David, this is exactly what I needed. :)
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!|||Benny,
This might be a little more efficient than other
solutions, but it's not as simple:
select top 1 exchangerate
from (
select exchangerate, pref
from (
select top 1 exchangerate, 1 as pref
from (
select top 3 rdate, exchangerate
from ExchangeRates E1
where E1.rdate >= (
select max(rdate) as lastBefore
from ExchangeRates E2
where E2.rdate < @.dt
)
order by rdate
) X
order by case when rdate < @.dt then @.dt - rdate else rdate - @.dt end
) X1
union all
select exchangerate, pref
from (
select top 1 exchangerate, 2 pref
from ExchangeRates
order by rdate
) Y
) T
order by pref
-- Steve Kass
-- Drew University
-- Ref: 250CBB08-57AE-45C7-97F2-AF26AFC368ED
Benny Chow wrote:
> Hello,
> I need help in writing a SQL statement in MS SQL Server 2000 to select
> the latest date (i.e., the date closest to or equal to the current date)
> for a given date.
> For example, in a table I have the following records:
> Date Exchange-Rate
> 01/Sep/03 0.55
> 05/Sep/03 0.59
> If the given date is 02/Sep/03, then the rate 0.55 should be return.
> If the given date is 03/Sep/03, then the rate 0.55 should be return.
> If the given date is 04/Sep/03, then the rate 0.59 should be return.
> Thanks in advanced,
> Benny
> *** Sent via Developersdex http://www.developersdex.com ***
> Don't just participate in USENET...get rewarded for it!|||David Portas (REMOVE_BEFORE_REPLYING_dportas@.acm.org) writes:
> Benny wants the closest, before or after the specified date according to
> his example.
Funny guy. :-) Some of our tables for prices and rates are sparse in a
similar manner, but we always assume that a value applies until a new
value comes in. So I assume he wanted the same.
But had Benny included CREATE TABLE and sample data in INSERT statements,
I would have seen that my solution was wrong!
--
Erland Sommarskog, SQL Server MVP, sommar@.algonet.se
Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techin.../2000/books.asp|||> Funny guy. :-) Some of our tables for prices and rates are sparse in a
> similar manner, but we always assume that a value applies until a new
> value comes in. So I assume he wanted the same.
I agree that it seems like an unusual requirement. Although I suppose if you
wanted to calculate the value of a currency deal retrospectively it might
make sense to take the closest rate as the best approximation. But IANAA.
> But had Benny included CREATE TABLE and sample data in INSERT statements,
> I would have seen that my solution was wrong!
I know that feeling! :|
--
David Portas
----
Please reply only to the newsgroup
--|||Thanks for all your guys help ^^.
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!