根据最早出现的另一个字段选择一行值
Selecting a row of values based on the earliest occurrence of another field
我有一个 table,其中包含重复的模具编号:jodbom.fbompart
。我希望能够 select 最早的作业编号:jomast.fjobno
和优先级编号:jomast.fschdprior
的数据行。 table 应该从 7 行变成 4 行。
http://sqlfiddle.com/#!18/d226e/1/0
SELECT
jodbom.fbompart as MoldNo,
jomast.fjobno as Job No,
jomast.frel_dt as DueDate,
jomast.fschdprior as Priority
FROM jodbom
INNER JOIN jomast ON jodbom.fjobno = jomast.fjobno
INNER JOIN jodrtg ON jomast.fjobno = jodrtg.fjobno
INNER JOIN inmastx ON jodbom.fbompart = inmastx.fpartno
LEFT JOIN sorels ON jomast.fsono+jomast.fkey = sorels.fsono+sorels.finumber+sorels.frelease
WHERE (jomast.fstatus = 'RELEASED' OR
jomast.fstatus = 'OPEN') AND (jomast.flisapl = 1) AND (jodbom.fltooling = 1) AND
(jodrtg.fpro_id <> '09')
Order by jomast.frel_dt, jomast.fpriority
以下是否适合您:
SELECT
MoldNo
, [Job No]
, DueDate
, Priority
FROM
(
SELECT
jodbom.fbompart as MoldNo,
jomast.fjobno as [Job No],
jomast.frel_dt as DueDate,
jomast.fschdprior as Priority,
ROW_NUMBER() OVER (PARTITION BY jodbom.fbompart ORDER BY jomast.fjobno, jomast.fschdprior) R
FROM jodbom
INNER JOIN jomast ON jodbom.fjobno = jomast.fjobno
INNER JOIN jodrtg ON jomast.fjobno = jodrtg.fjobno
INNER JOIN inmastx ON jodbom.fbompart = inmastx.fpartno
LEFT JOIN sorels ON jomast.fsono+jomast.fkey = sorels.fsono+sorels.finumber+sorels.frelease
WHERE (jomast.fstatus = 'RELEASED' OR
jomast.fstatus = 'OPEN') AND (jomast.flisapl = 1) AND (jodbom.fltooling = 1) AND
(jodrtg.fpro_id <> '09')
) Q
WHERE R = 1
Order by DueDate, Priority
我有一个 table,其中包含重复的模具编号:jodbom.fbompart
。我希望能够 select 最早的作业编号:jomast.fjobno
和优先级编号:jomast.fschdprior
的数据行。 table 应该从 7 行变成 4 行。
http://sqlfiddle.com/#!18/d226e/1/0
SELECT
jodbom.fbompart as MoldNo,
jomast.fjobno as Job No,
jomast.frel_dt as DueDate,
jomast.fschdprior as Priority
FROM jodbom
INNER JOIN jomast ON jodbom.fjobno = jomast.fjobno
INNER JOIN jodrtg ON jomast.fjobno = jodrtg.fjobno
INNER JOIN inmastx ON jodbom.fbompart = inmastx.fpartno
LEFT JOIN sorels ON jomast.fsono+jomast.fkey = sorels.fsono+sorels.finumber+sorels.frelease
WHERE (jomast.fstatus = 'RELEASED' OR
jomast.fstatus = 'OPEN') AND (jomast.flisapl = 1) AND (jodbom.fltooling = 1) AND
(jodrtg.fpro_id <> '09')
Order by jomast.frel_dt, jomast.fpriority
以下是否适合您:
SELECT
MoldNo
, [Job No]
, DueDate
, Priority
FROM
(
SELECT
jodbom.fbompart as MoldNo,
jomast.fjobno as [Job No],
jomast.frel_dt as DueDate,
jomast.fschdprior as Priority,
ROW_NUMBER() OVER (PARTITION BY jodbom.fbompart ORDER BY jomast.fjobno, jomast.fschdprior) R
FROM jodbom
INNER JOIN jomast ON jodbom.fjobno = jomast.fjobno
INNER JOIN jodrtg ON jomast.fjobno = jodrtg.fjobno
INNER JOIN inmastx ON jodbom.fbompart = inmastx.fpartno
LEFT JOIN sorels ON jomast.fsono+jomast.fkey = sorels.fsono+sorels.finumber+sorels.frelease
WHERE (jomast.fstatus = 'RELEASED' OR
jomast.fstatus = 'OPEN') AND (jomast.flisapl = 1) AND (jodbom.fltooling = 1) AND
(jodrtg.fpro_id <> '09')
) Q
WHERE R = 1
Order by DueDate, Priority