mysql SUM, пока значение не будет достигнуто

0

Я сделал сайт для "ходячего вызова", в котором есть таблица, в которой пробегают мили.

Цель - 2105 миль (Ньюкасл, Великобритания - Стамбул).

На домашней странице у меня есть таблица лидеров, в которой в настоящее время показаны 5 команд, которые собрали больше миль.

Я использую следующий запрос для достижения этого:

SELECT 
    SUM(log.distance) AS l, 
    log.*, 
    team.*
FROM 
    team
RIGHT JOIN 
    log ON team.teamname = log.teamname                             
GROUP BY 
    log.teamname
ORDER BY 
    l DESC

Однако я хочу, чтобы эта таблица лидеров показала 5 команд, которые закончили сначала, а не тех, кто прошел дальше всего. т.е. команды, которые вначале достигли 2105 миль.

Текущий веб-сайт можно просмотреть здесь

  • 1
    Пожалуйста, опубликуйте DDL журнала и командных таблиц. На ваш вопрос невозможно ответить, не зная, какие временные метки вы сохранили (и вам придется простить меня за то, что я не слепо нажимал на любые представленные ссылки)
  • 1
    как вы ведете учет времени и в какой таблице?
Показать ещё 1 комментарий
Теги:

2 ответа

3
Лучший ответ

Добавьте в таблицу нулевое поле completedDate и заполните его, когда кто-то завершит гонку. Заказать по завершенной дате.

Невозможно было бы заказать тот, кто закончил сначала иначе.

  • 1
    Я думаю, что есть способ, если есть отметка времени в таблице журнала. Сайт, кажется, уже работает и работает, а база данных выглядит довольно хорошо заполненной. так что я думаю, что уже слишком поздно, чтобы добавить новое поле
  • 0
    Ах хорошо. Я не щелкнул ссылку и заметил, что некоторые люди уже выполнили задание. Если временная метка существует, то это возможно. Тем не менее, я все равно создал бы столбец, а затем написал сценарий для его заполнения в настоящее время из метки времени журнала. Затем установите и используйте новое поле для всех будущих завершений.
Показать ещё 1 комментарий
0

Поскольку у вас есть поле timestamp, которое получает текущее время каждый раз, когда команда вводит количество пройденных миль, вы можете сделать следующее:

    SELECT 
        SUM(log.distance) AS l,
        MAX(log.timestamp) AS t,
        log.*, 
        team.*
    FROM 
        team
    RIGHT JOIN 
        log ON team.teamname = log.teamname                          
    GROUP BY 
        log.teamname
    WHERE
        l >= 2105
    ORDER BY 
        t ASC

Имейте в виду, что это будет работать, только если вы не позволите команде добавить дополнительные мили после завершения заданного расстояния. Если они смогут добавить дополнительные мили после завершения задания, дайте мне знать, и я попробую найти другой запрос

  • 0
    Привет, да, команды все еще могут добавлять мили после того, как они достигли общего числа :(
  • 0
    Рокет Ронни: хорошо, в таком случае я думаю, что решение Чакса самое простое. Я полагаю, что в SQL есть способ суммировать результаты до тех пор, пока не будет выполнено условие, но я на самом деле не эксперт по SQL, поэтому я бы остановился на решении Chucks, если я там, где вы :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню