Home All Groups Group Topic Archive Search About
Author
1 Mar 2007 10:22 PM
neilsolent
Hi
I am stuck!

I have the following table:

CREATE TABLE HISTORY
(
    PRODUCT_CODE    int NOT NULL,
    PRODUCT_QTY    int NOT NULL,
    SALE_TIMESTAMP    datetime NOT NULL,
    CONSTRAINT H1 PRIMARY KEY (PRODUCT_CODE, REC_TIMESTAMP)
)
go

I want to create the following procedure to list the most recent sale
of each product, before a particular timestamp:

CREATE PROCEDURE sp_get_sales @product_code int, @sale_timestamp
datetime
AS
BEGIN
    SELECT PRODUCT_CODE, PRODUCT_QTY, MAX(SALE_TIMESTAMP) FROM HISTORY
        WHERE (PRODUCT_CODE = @product_code) AND (SALE_TIMESTAMP <=
@sale_timestamp)
        GROUP BY PRODUCT_CODE
END
go

However, this fails to create with:

Msg 8120 Column 'PRODUCT_QTY' is invalid in the select list because it
is not contained in either an aggregate function or the GROUP BY
clause.

How can I write a proc to do this, but still include the PRODUCT_QTY
column in the output?

thanks,
Neil

Author
1 Mar 2007 11:19 PM
Tom Moreau
Assuming that if two sales occur at exactly the same, you want just  one of
them:

CREATE PROCEDURE sp_get_sales @product_code int, @sale_timestamp
datetime
AS
BEGIN
SELECT TOP 1
    PRODUCT_CODE, PRODUCT_QTY, SALE_TIMESTAMP
FROM
    HISTORY
WHERE
        (PRODUCT_CODE = @product_code)
AND (SALE_TIMESTAMP <= @sale_timestamp)
ORDER BY
    SALE_TIMESTAMP  DESC
END
go


--
   Tom

----------------------------------------------------
Thomas A. Moreau, BSc, PhD, MCSE, MCDBA, MCITP, MCTS
SQL Server MVP
Toronto, ON   Canada
..
"neilsolent" <n***@solenttechnology.co.uk> wrote in message
news:1172787732.437425.198610@n33g2000cwc.googlegroups.com...
Hi
I am stuck!

I have the following table:

CREATE TABLE HISTORY
(
PRODUCT_CODE int NOT NULL,
PRODUCT_QTY int NOT NULL,
SALE_TIMESTAMP datetime NOT NULL,
CONSTRAINT H1 PRIMARY KEY (PRODUCT_CODE, REC_TIMESTAMP)
)
go

I want to create the following procedure to list the most recent sale
of each product, before a particular timestamp:

CREATE PROCEDURE sp_get_sales @product_code int, @sale_timestamp
datetime
AS
BEGIN
SELECT PRODUCT_CODE, PRODUCT_QTY, MAX(SALE_TIMESTAMP) FROM HISTORY
WHERE (PRODUCT_CODE = @product_code) AND (SALE_TIMESTAMP <=
@sale_timestamp)
GROUP BY PRODUCT_CODE
END
go

However, this fails to create with:

Msg 8120 Column 'PRODUCT_QTY' is invalid in the select list because it
is not contained in either an aggregate function or the GROUP BY
clause.

How can I write a proc to do this, but still include the PRODUCT_QTY
column in the output?

thanks,
Neil

Bookmark and Share

Post Thread options