选择满足条件的第一行+上面的第一行

时间:2020-09-18 00:03:36

标签: sql sql-server

我编写了一个SQL查询以返回以下结果: Rows returned

但是,我需要将其进一步“过滤”为仅以黄色突出显示的行,因为我希望第一行具有param_id ='update_flag'和param_val ='1'。我还需要上面的行,因为我需要针对相同的订单号(在此示例中为156)检索与param_id ='period_from'相对应的param_val值(202017)。

这是我的代码,我从2个不同的表中获取数据:

SELECT
report1.orderno AS t1_orderno,
report2.orderno AS t2_orderno,
report1.report_name AS t1_reportname,
report2.report_name AS t2_reportname,
report1.variant,
report1.status,
report1.client,
report2.param_id,
report2.param_val 
FROM report1 
INNER JOIN
  report2 
  ON report1.orderno = report2.orderno 
  AND report2.param_id IN 
  (
     'period_from',
     'update_flag'
  )
  AND report1.report_name = 'PR28' 
  AND report1.variant = '20' 
  AND report1.status = 'T' 
  AND report1.client = '10' 
ORDER BY
  report1.orderno DESC

谢谢您的任何帮助,这是我的努力!

1 个答案:

答案 0 :(得分:0)

WITH num_row AS (
  SELECT row_number() OVER (ORDER BY report1.orderno DESC) as nom,
  report1.orderno AS t1_orderno,
  report2.orderno AS t2_orderno,
  report1.report_name AS t1_reportname,
  report2.report_name AS t2_reportname,
  report1.variant,
  report1.status,
  report1.client,
  report2.param_id,
  report2.param_val 
FROM report1 
INNER JOIN
  report2 
  ON report1.orderno = report2.orderno 
  AND report2.param_id IN (
   'period_from',
   'update_flag'
  )
  AND report1.report_name = 'PR28' 
  AND report1.variant = '20' 
  AND report1.status = 'T' 
  AND report1.client = '10' 
)
SELECT * FROM num_row
WHERE nom BETWEEN 1 AND 2