我正在取几个数据点的最小值和最大值,但其中一些数据点让患者在不同的日子前往相同的地点。 有没有办法添加一个索引或代码,根据 order by 语句或类似的东西将它们区分为单独的组? 我想将它们区分为单独的组(通过分离患者离开一个位置,去了一个新的位置,然后返回到原来的位置(在分组方面将其视为一个新位 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个postgresql表,包含仓库之间不同项目(模型)的移动。
例如,以下记录表示已从仓库1到2发送了5个模型1单元:
source target model units
------ ------ ----- -----
1 2 1 5
我正在尝试构建一个SQL查询,以获取发送和接收的单元之间的差异,按模型分组。 再举一个例子:
source target model units
------ ------ ----- -----
1 2 1 5 -- 5 sent from 1 to 2
1 2 2 1
2 1 1 2 -- 2 sent from 2 to 1
2 1 1 1 -- 1 more sent from 2 to 1
结果应该是:
source target model diff
------ ------ ----- ----
1 2 1 2 -- 5 sent minus 3 received
1 2 2 1
我想知道单个SQL查询是否可行。
这是表创建脚本和一些数据,以防万一有人想尝试它:
CREATE TEMP TABLE movements
(
source INTEGER,
target INTEGER,
model INTEGER,
units INTEGER
);
insert into movements values (1,2,1,5);
insert into movements values (1,2,2,1);
insert into movements values (2,1,1,2);
insert into movements values (2,1,1,1);
您可以使用两个子选择来对每个方向的运动求和,然后对这两个子查询的结果进行求和并求和:
SELECT source, target, model, SUM(units)
FROM (
SELECT source, target, model, SUM(units) AS units
FROM movements
WHERE source < target
GROUP BY source, target, model
UNION ALL
SELECT target, source, model, SUM(-units) AS units
FROM movements
WHERE source > target
GROUP BY source, target, model
) T1
GROUP BY source, target, model
这样做你需要的吗? 我没有要测试的Oracle数据库,所以我希望分组表达式的规则与MS SQL Server相同
SELECT
CASE WHEN source < target THEN source ELSE target END AS source,
CASE WHEN source < target THEN target ELSE source END AS target,
SUM(CASE WHEN source < target THEN units ELSE -units END) AS Diff,
model
FROM movements
GROUP BY
CASE WHEN source < target THEN source ELSE target END,
CASE WHEN source < target THEN target ELSE source END,
model
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.