如何根据另一列的值得出一列的值?
How do I derive a value for a column based on another column's value?
我有一个 projects
table 如下所示。那里有两个
略有不同的 id 列 idx
和 idy
——一个 idx
可以有多个 idy
(例如
版本控制)。
idx, idy, name, use_count, usage_date
-----, -------, ------------, ----------, ----------
x1, x11, x1 name 1, 10, 1
x1, x13, x1 name 3, 10, 3
x1, x12, x1 name 2, 10, 2
x2, x21, x2 name 1, 10, 2
x3, x31, x3 name 1, 10, 2
我们的目标是巩固使用,这样对于每个 idx
,结果将
有:
- a
use_count
col 是 SUM(use_count)
for same idx
- 最新
usage_date
- 最新对应的名字usage_date
此外,usage_date 必须在一定范围内,但这希望是微不足道的。
idx, idy, name, use_count, usage_date
-----, -------, ------------, ----------, ----------
x1, x13, x1 name 3, 30, 3
x2, x21, x2 name 1, 10, 2
x3, x31, x3 name 1, 10, 2
到目前为止,我已经
SELECT
idx, idy, name,
sum(use_count) as use_count,
usage_date
FROM
projects
WHERE
usage_date <= 3
GROUP BY
idx
..但无法弄清楚如何导出项目的最新名称
(ID x1
)
你可以试试下面的方法-
select X.idx,idy,name,X.use_count,usage_date from
(
select idx,sum(use_count) as use_count
from t
group by idx
)X inner join
(
select * from t a where usage_date = (select max(usage_date) from t b where a.idx=b.idx)
)Y on X.idx=Y.idx
输出:
idx idy name use_count usage_date
x1 x13 x1 name 3 30 3
x2 x21 x2 name 1 10 2
x3 x31 x3 name 1 10 2
我有一个 projects
table 如下所示。那里有两个
略有不同的 id 列 idx
和 idy
——一个 idx
可以有多个 idy
(例如
版本控制)。
idx, idy, name, use_count, usage_date
-----, -------, ------------, ----------, ----------
x1, x11, x1 name 1, 10, 1
x1, x13, x1 name 3, 10, 3
x1, x12, x1 name 2, 10, 2
x2, x21, x2 name 1, 10, 2
x3, x31, x3 name 1, 10, 2
我们的目标是巩固使用,这样对于每个 idx
,结果将
有:
- a
use_count
col 是SUM(use_count)
for sameidx
- 最新
usage_date
- 最新对应的名字usage_date
此外,usage_date 必须在一定范围内,但这希望是微不足道的。
idx, idy, name, use_count, usage_date
-----, -------, ------------, ----------, ----------
x1, x13, x1 name 3, 30, 3
x2, x21, x2 name 1, 10, 2
x3, x31, x3 name 1, 10, 2
到目前为止,我已经
SELECT
idx, idy, name,
sum(use_count) as use_count,
usage_date
FROM
projects
WHERE
usage_date <= 3
GROUP BY
idx
..但无法弄清楚如何导出项目的最新名称
(ID x1
)
你可以试试下面的方法-
select X.idx,idy,name,X.use_count,usage_date from
(
select idx,sum(use_count) as use_count
from t
group by idx
)X inner join
(
select * from t a where usage_date = (select max(usage_date) from t b where a.idx=b.idx)
)Y on X.idx=Y.idx
输出:
idx idy name use_count usage_date
x1 x13 x1 name 3 30 3
x2 x21 x2 name 1 10 2
x3 x31 x3 name 1 10 2