我们有一个表来跟踪仓库中的物品:
-------------------------
ID DATEIN DATEOUT
-------------------------
我们需要的是每周仓库中物品数量的清单。
这是我们已经走了多远:
SELECT
COUNT (ID)
FROM
table
WHERE
table.DATEIN<=#somedate1#
AND
(
table.DATEOUT>#somedate1#
OR
table.DATEOUT IS NULL
)
这为我们提供了日期#somedate1#中仓库中的物品数量。但是,我们需要每周的金额列表。 (请记住,有些物品可能会在仓库中存放数月)
棘手的部分不是本周,我们可以使用DATEPART(“ww”,#somedate1#),但循环使用日期。
有什么想法吗?
答案 0 :(得分:1)
你试过吗?
SELECT
DATEPART("ww","D"),COUNT (ID)
FROM
(
SELECT Table.DATEIN as D
FROM table
WHERE table.DATEIN<=#somedate1# AND ( table.DATEOUT>#somedate1# OR table.DATEOUT IS NULL)
UNION ALL
SELECT Table.DATEOUT as D
FROM table
WHERE table.DATEIN<=#somedate1# AND ( table.DATEOUT>#somedate1# OR table.DATEOUT IS NULL)
)
GROUP BY DATEPART("ww","D")
首先,您需要制作UNION
以确保拥有所有DATEIN
和DATEOUT
,然后才能GROUP BY
答案 1 :(得分:0)
到目前为止,我们已经提出了这个问题。
此代码列出了物品进入仓库或离开的所有日期。这些是我们在第一篇文章中应用代码所需的日期。即我们需要遍历这些日期,对于每次迭代,下一个日期用作#somedate1#
SELECT
table.DATEIN AS DATE
FROM
table
GROUP BY
table.DATEIN
UNION
SELECT
table.DATEOUT AS DATE
FROM
table
WHERE
table.DATEOUT NOT IN (
SELECT
table.DATEIN
FROM
table
GROUP BY
table.DATEIN
)
GROUP BY
table.DATEOUT
我们仍然坚持我们如何循环使用它们。我们尝试的所有内容都会产生我们不期望的奇怪结果。
答案 2 :(得分:0)
我们得到了它!答案一直盯着我们。这就是诀窍:
SELECT
COUNT (table1.ID),
table2.DATE
FROM
table1,
(
SELECT
table1.DATEIN AS DATE
FROM
table1
GROUP BY
table1.DATEIN
UNION
SELECT
table1.DATEOUT AS DATE
FROM
table1
WHERE
table1.DATEOUT NOT IN (
SELECT
table1.DATEIN
FROM
table1
GROUP BY
table1.DATEIN
)
GROUP BY
table1.DATEOUT
) table2
WHERE
table1.DATEIN<=table2.DATE
AND
(
table1.DATEOUT>table2.DATE
OR
table1.DATEOUT IS NULL
)
GROUP BY
table2.DATE