如何从基本记录查询中指定以下值?

How to specified below value from base record query?

我有 table 这样的,我需要在 table 中指定低于基价的价格。

id   value   price   base
1     aaa     100    
2     bbb     200    
3     ccc     300    Yes
4     aaa     200    Yes
5     aaa     300
6     aaa     400

像这样:

id   value   price   status
1     aaa     100     down 
2     bbb     200     
3     ccc     300     base
4     aaa     200     base
5     aaa     300     up
6     aaa     400     up

使用此代码我可以获得最高和最低价格值:

SELECT
    min(price) as min_price
    , max(price) as max_price
FROM 
(
    select *
    From MyTable
) tmp;

如果我对问题的理解正确,以下陈述可能是解决您问题的方法:

Table:

SELECT *
INTO MyTable
FROM (VALUES
   (1, 'aaa', 100, NULL,  CONVERT(varchar(5), NULL)),
   (2, 'bbb', 200, NULL,  CONVERT(varchar(5), NULL)),
   (3, 'ccc', 300, 'Yes', CONVERT(varchar(5), NULL)),
   (4, 'aaa', 200, 'Yes', CONVERT(varchar(5), NULL)),
   (5, 'aaa', 300, NULL,  CONVERT(varchar(5), NULL)),
   (6, 'aaa', 400, NULL,  CONVERT(varchar(5), NULL))
) v (id, value, price, base, status)

SELECT 语句:

SELECT 
   id,
   value,
   price,
   base,
   CASE
      WHEN base = 'Yes' THEN 'base'
      WHEN price < MAX(CASE WHEN base = 'Yes' THEN price END) OVER (PARTITION BY value) THEN 'down'
      WHEN price > MAX(CASE WHEN base = 'Yes' THEN price END) OVER (PARTITION BY value) THEN 'up'
   END AS status
FROM MyTable
ORDER By id

更新声明:

; WITH cte AS (
   SELECT 
      id,
      value,
      price,
      base,
      status,
      CASE
         WHEN base = 'Yes' THEN 'base'
         WHEN price < MAX(CASE WHEN base = 'Yes' THEN price END) OVER (PARTITION BY value) THEN 'down'
         WHEN price > MAX(CASE WHEN base = 'Yes' THEN price END) OVER (PARTITION BY value) THEN 'up'
      END AS status2
   FROM MyTable
)
UPDATE cte
SET status = status2

结果:

id value price base status
--------------------------
1  aaa   100        down
2  bbb   200    
3  ccc   300   Yes  base
4  aaa   200   Yes  base
5  aaa   300        up
6  aaa   400        up