MSSQL-如何根据准备就绪日期对数量求和,以输入散点图?

MSSQL-如何根据准备就绪日期对数量求和,以输入散点图?,sql,sql-server,tsql,Sql,Sql Server,Tsql,Microsoft SQL Server 2016(SP2) 我试图展示随着时间的推移,一个产品准备了多少部件。我想把它输入散点图(我可以做这部分)。我最初试图在每小时的顶部接近这一点,但我不需要这个散点图。如果我使用日期戳代替x轴,而不是绘制0-23小时和四舍五入时间,我将有更好的准确性 该表如下所示: +-------------+---------+---------+------+-------------------------+ | location_id | tray_id | p

Microsoft SQL Server 2016(SP2)

我试图展示随着时间的推移,一个产品准备了多少部件。我想把它输入散点图(我可以做这部分)。我最初试图在每小时的顶部接近这一点,但我不需要这个散点图。如果我使用日期戳代替x轴,而不是绘制0-23小时和四舍五入时间,我将有更好的准确性

该表如下所示:

+-------------+---------+---------+------+-------------------------+
| location_id | tray_id | part_id | qty  |        ready_at         |
+-------------+---------+---------+------+-------------------------+
|          21 |     024 |    1816 | 6461 | 2019-12-20 16:27:58.280 |
|          21 |     314 |    1816 | 6054 | 2019-12-20 16:27:58.280 |
|          21 |     359 |    1816 | 6668 | 2019-12-20 16:27:58.280 |
|          23 |     118 |    1816 | 6346 | 2019-12-21 08:07:25.733 |
|          23 |     239 |    1816 | 6656 | 2019-12-21 08:07:25.733 |
+-------------+---------+---------+------+-------------------------+
我想要回报的是:

+---------+----------------+-------------------------+
| part_id | running total  |        ready_at         |
+---------+----------------+-------------------------+
|    1816 |          19183 | 2019-12-20 16:27:58.280 |
|    1816 |          32185 | 2019-12-21 08:07:25.733 |
+---------+----------------+-------------------------+
任何帮助都将不胜感激,谢谢

--编辑 理查德·汉塞尔的回答对我有用。我能够创建一个存储过程来返回我需要的结果,并使用where子句查看特定的part_id


你们太棒了

这里有各种各样的答案,但大多数答案都不能解决数据集中有多个相同日期这一事实

让我们将数据放入表变量中:

DECLARE @table TABLE (location_id INT, tray_id CHAR(3), part_id INT, qty INT, ready_at DATETIME)
INSERT INTO @table 
SELECT 21, '024', 1816, 6461, '2019-12-20 16:27:58.280' UNION ALL
SELECT 21, '314', 1816, 6054, '2019-12-20 16:27:58.28' UNION ALL
SELECT 21, '359', 1816, 6668, '2019-12-20 16:27:58.280' UNION ALL
SELECT 23, '118', 1816, 6346, '2019-12-21 08:07:25.733' UNION ALL
SELECT 23, '239', 1816, 6656, '2019-12-21 08:07:25.733';
现在,我可以这样做以获得您要求的结果:

WITH x AS (
    SELECT
        part_id,
        ready_at,
        SUM(qty) OVER (ORDER BY ready_at ROWS UNBOUNDED PRECEDING) AS running_total,
        ROW_NUMBER() OVER (PARTITION BY ready_at ORDER BY ready_at) AS order_id
    FROM
        @table)
SELECT
    part_id,
    ready_at,
    MAX(running_total) AS running_total
FROM 
    x
GROUP BY
    part_id,
    ready_at;
结果如下:

part_id ready_at                running_total
1816    2019-12-20 16:27:58.280 19183
1816    2019-12-21 08:07:25.733 32185
奖励法,你也可以反过来做,我觉得这样比较干净

WITH y AS (
    SELECT
        part_id,
        ready_at,
        SUM(qty) AS running_total
    FROM
        @table
    GROUP BY
        part_id,
        ready_at)
SELECT
    part_id,
    ready_at,
    SUM(running_total) OVER (ORDER BY ready_at ROWS UNBOUNDED PRECEDING) AS running_total
FROM
    y;

相同的结果。

您需要按[ready\u at]进行分区:

select distinct 
    part_id
    ,sum(qty) over (partition by ready_at ORDER BY part_id ) as running_total
    ,ready_at
from #tmp

尝试此
选择part_id,sum(数量)over(order by part_id)作为“running_total”,ready_在from table
@vhadalgi这只是将所有数量相加。没有显示2019年12月20日与2019年12月21日的准备情况如果数据集包含多个part_id,则不起作用。我使用示例1创建了一个存储过程,我使用where子句作为参数制作了一个临时tbl,以按part_id进行筛选。工作非常完美。另一个答案给出了奇怪的结果。随着时间的推移,零件会增加,也会减少(不可能)。不知道这是怎么发生的。