I have a C# application using OLEDB to connect to a DB2 database. Basically, I want to do this:
SELECT CALC.WEEK, COUNT(CALC.ID) AS TRANSACTIONS ,
SUM(CALC.SUBTOTAL) AS REVENUE
FROM (
SELECT
CASE
WHEN O.DATE < ? - 21 DAYS THEN 1
WHEN O.DATE >= ? - 21 DAYS AND O.DATE < ? - 14 DAYS THEN 2
WHEN O.DATE >= ? - 14 DAYS AND O.DATE < ? - 7 DAYS THEN 3
WHEN O.DATE >= ? - 7 DAYS THEN 4
END AS WEEK,
O.ID, O.SUBTOTAL
FROM COMPANY.ORDERS AS O INNER JOIN
COMPANY.LOCATIONS AS L ON O.LOCATION_ID = L.ID INNER JOIN
COMPANY.STORES AS S ON O.STORE_ID = S.ID
WHERE O.DATE >= ? - 28 DAYS
AND O.DATE <= ?
AND S.NUMBER = ?
) AS CALC
GROUP BY CALC.WEEK;
However, when I run that, I get this:
An expression with a datetime value or a labeled duration is not valid.. SQLCODE=-182, SQLSTATE=42816, DRIVER=3.63.108
And if i change it to wrap the ? parameter with a TIMESTAMP function thusly:
SELECT CALC.WEEK, COUNT(CALC.ID) AS TRANSACTIONS ,
SUM(CALC.SUBTOTAL) AS REVENUE
FROM (
SELECT
CASE
WHEN O.DATE < TIMESTAMP(?) - 21 DAYS THEN 1
WHEN O.DATE >= TIMESTAMP(?) - 21 DAYS AND O.DATE < TIMESTAMP(?) - 14 DAYS THEN 2
WHEN O.DATE >= TIMESTAMP(?) - 14 DAYS AND O.DATE < TIMESTAMP(?) - 7 DAYS THEN 3
WHEN O.DATE >= TIMESTAMP(?) - 7 DAYS THEN 4
END AS WEEK,
O.ID, O.SUBTOTAL
FROM COMPANY.ORDERS AS O INNER JOIN
COMPANY.LOCATIONS AS L ON O.LOCATION_ID = L.ID INNER JOIN
COMPANY.STORES AS S ON O.STORE_ID = S.ID
WHERE O.DATE >= TIMESTAMP(?) - 28 DAYS
AND O.DATE <= TIMESTAMP(?)
AND S.NUMBER = ?
) AS CALC
GROUP BY CALC.WEEK
I get this error:
The invocation of routine "TIMESTAMP" is ambiguous. The argument in position "1" does not have a best fit.. SQLCODE=-245, SQLSTATE=428F5, DRIVER=3.63.108
As a bonus question, short of creating a PL/SQL function, is there a way to use the same parameter for all the timestamp locations instead of supplying the same value 8 times?

timestamp. How are you invoking this statement? (I don't know much about DB2) – Jack Douglas♦ Nov 3 '12 at 17:23The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used– Lucas Nov 3 '12 at 17:24