Используя DB2 SQL, как я могу избежать возврата строк, которые не являются самыми последними, для условия, которое НЕ является частью моего предложения where?

Вы можете просто использовать Object.entries() и Array.reduce()

var fields = {
  "name":"andy",
  "age" : null,
  "email" : null,
  "status" : true
};

var result = Object.entries(fields).reduce((a,[key,val])=>{
  if(val)
    a.push({name : key, value : val});
  return a;
},[]);

console.log(result);

Выход:

[
  {
    "name": "name",
    "value": "andy"
  },
  {
    "name": "status",
    "value": true
  }
]
2
задан e_i_pi 18 January 2019 в 20:32
поделиться

1 ответ

Вам нужно использовать что-то, что DB2 вызывает OLAP-функции (другие движки RDMS обычно называют их оконными функциями - оба термина действительны). Функция OLAP позволяет вам возвращать аналитические данные о строке, например, что это за номер в отсортированном списке.

Для вашего запроса вы хотите вернуть только первую строку для каждого человека, поэтому мы используем функцию OLAP под названием ROW_NUMBER(). Когда мы используем эту функцию, мы хотим разделить данные Col1 / Col2 (т.е. мы группируемся по этим данным), а затем выполнить обратную сортировку по Col3, чтобы получить последний результат. После этого мы хотим выбрать строки, которые имеют верхнее значение в функции OLAP, например:

SELECT *
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Col3 DESC) AS rn
    FROM schema.table
) AS ranked_scenarios
WHERE rn = 1
0
ответ дан e_i_pi 18 January 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: