Можно ли foxpro в выражении sql заполнить столбец winners_name на основе максимального значения условия и идентификатора с разными именами - PullRequest
1 голос
/ 17 октября 2019

Возможно ли foxpro в выражении sql добавить и заполнить столбец winners_name на основе максимального значения условия и идентификатора с разными именами.

Я создал выражение sql, но он не поддерживается foxpro,есть другой способ сделать это, а не использовать цикл (мне нравится выражение sql для более быстрого результата даже в строках строк по 50 КБ)

SELECT * , ;
(SELECT TOP 1 doc_name FROM Table1 as b1 WHERE ALLTRIM(b1.id) = a.id ORDER BY b1.score DESC, b1.id) as WINNERS_NAME ;
FROM Table1 as a

У меня есть только 1 таблица со столбцами [имя, идентификатор, оценка]

Пример таблицы будет выглядеть следующим образом

NAME   | ID   | SCORE |
BEN    | 101  | 5     |
KEN    | 101  | 2     |
ZEN    | 101  | 3     |
JEN    | 103  | 4     |
REN    | 103  | 3     |
LEN    | 102  | 5     |
PEN    | 102  | 4     |
ZEN    | 102  | 3     |  

Результат будет таким: (winners_name - это тег идентификатора)

NAME   | ID   | SCORE | WINNERS_NAME
BEN    | 101  | 5     | BEN
KEN    | 101  | 2     | BEN
ZEN    | 101  | 3     | BEN
JEN    | 103  | 4     | PEN
REN    | 103  | 3     | PEN
LEN    | 102  | 5     | LEN
PEN    | 103  | 5     | PEN
ZEN    | 102  | 3     | LEN

1 Ответ

2 голосов
/ 17 октября 2019

Попробуйте этот подход:

SELECT
    a.NAME,
    a.ID,
    a.SCORE,
    b.WINNERS_NAME
FROM Table1 a
INNER JOIN
(
    SELECT t1.ID, t1.NAME AS WINNERS_NAME
    FROM
    (
        SELECT ID, SCORE, MIN(NAME) AS NAME
        FROM Table1
        GROUP BY ID, SCORE
    ) t1
    INNER JOIN
    (
        SELECT ID, MAX(SCORE) AS MAX_SCORE
        FROM Table1
        GROUP BY ID
    ) t2
        ON t1.ID = t2.ID AND
           t1.SCORE = t2.MAX_SCORE 
) b
    ON a.ID = b.ID
ORDER BY
    a.ID;

Перейдите по ссылке ниже для демонстрации, работающей в MySQL (хотя синтаксис должен работать на FoxPro):

Демо

...