对 table 中的记录进行分组
Grouping records from a table
请查看此文件中的数据:
https://drive.google.com/file/d/1gewGZst9zwEzntK9LnwZT4j86rHMVICS/view?usp=sharing
此数据表示特定日期特定产品的配方(在 pmd_ppm_pr_code 列中标识的产品和 pmd_pi_code 列中的成分)。我需要做的是获取特定产品的最新配方。这是我整理的 SQL;
select
pmd_ppm_sio_reference
,pmd_ppm_pr_code
,pmd_ppm_date_effective
,pmd_percentage
,pmd_pi_code
,row_number()
over(partition by pmd_ppm_pr_code, pmd_pi_code
order by pmd_ppm_pr_code, pmd_pi_code, trunc(pmd_ppm_date_effective) desc) as "row"
from ppm_details
where pmd_ppm_sio_reference = 1801
and pmd_ppm_pr_code = 'A24052'
where子句只是为了限制结果,让我见树见木。
这是结果;
https://drive.google.com/file/d/1mH7n0Q5yQYukJvgR7sh94OsdUaD8sXY_/view?usp=sharing
问题出在行 = 1 的组中的最后一项。那是因为该成分未在最新配方中使用,但它为我提供了使用该成分的最新条目。
我已经尝试将日期添加到分区中,但所做的只是为每一行提供 row = 1。
您的数据中有一列表示配方 - 让我随机猜测这是 pmd_ppm_pr_code
。我假设生效日期是最近的日期。让我假设配方中的所有产品都具有相同的生效日期。
如果是这样,您要使用 dense_rank()
,而不是 row_number()
:
dense_rank() over (partition by pmd_ppm_pr_code order by pmd_ppm_date_effective desc) as seqnum
您的版本 returns 每个产品的最新日期 分别 。这个 returns 最新的食谱。
请注意,您的 order by
重复了分区列。这是完全没有必要的。 order by
在 一个分区内 。
请查看此文件中的数据: https://drive.google.com/file/d/1gewGZst9zwEzntK9LnwZT4j86rHMVICS/view?usp=sharing
此数据表示特定日期特定产品的配方(在 pmd_ppm_pr_code 列中标识的产品和 pmd_pi_code 列中的成分)。我需要做的是获取特定产品的最新配方。这是我整理的 SQL;
select
pmd_ppm_sio_reference
,pmd_ppm_pr_code
,pmd_ppm_date_effective
,pmd_percentage
,pmd_pi_code
,row_number()
over(partition by pmd_ppm_pr_code, pmd_pi_code
order by pmd_ppm_pr_code, pmd_pi_code, trunc(pmd_ppm_date_effective) desc) as "row"
from ppm_details
where pmd_ppm_sio_reference = 1801
and pmd_ppm_pr_code = 'A24052'
where子句只是为了限制结果,让我见树见木。
这是结果; https://drive.google.com/file/d/1mH7n0Q5yQYukJvgR7sh94OsdUaD8sXY_/view?usp=sharing
问题出在行 = 1 的组中的最后一项。那是因为该成分未在最新配方中使用,但它为我提供了使用该成分的最新条目。
我已经尝试将日期添加到分区中,但所做的只是为每一行提供 row = 1。
您的数据中有一列表示配方 - 让我随机猜测这是 pmd_ppm_pr_code
。我假设生效日期是最近的日期。让我假设配方中的所有产品都具有相同的生效日期。
如果是这样,您要使用 dense_rank()
,而不是 row_number()
:
dense_rank() over (partition by pmd_ppm_pr_code order by pmd_ppm_date_effective desc) as seqnum
您的版本 returns 每个产品的最新日期 分别 。这个 returns 最新的食谱。
请注意,您的 order by
重复了分区列。这是完全没有必要的。 order by
在 一个分区内 。