Как подсчитать количество строк за последний день? - PullRequest
0 голосов
/ 13 июня 2018

Вот моя структура таблицы:

// refund_requests
+----+---------+------+------------+
| id | user_id | paid | date_time  |
+----+---------+------+------------+
| 1  | 123     | 1    | 1498830938 |
| 2  | 456     | 0    | 1498830939 |
| 3  | 123     | 0    | 1498830940 |
+----+---------+------+------------+

Мне нужно получить две цифры:

  1. Количество зарегистрированных запросов на возврат средств за последний день для конкретного пользователя.
  2. Значение paid последнего зарегистрированного запроса на возврат для определенного пользователя.

Таким образом, ожидаемый результат : (для пользователя user_id = 123)

+---------------------------------+--------------------------------+
| refund_requests_num_in_last_day | paid_value_of_the_last_request |
+---------------------------------+--------------------------------+
| 2                               | 0                              |
+---------------------------------+--------------------------------+

Есть идеи, как я могу получить это в MySQL?


Вот мой текущий запрос:

SELECT COALESCE(sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  DAY))),0) AS refund_requests_num_in_last_day,
       paid AS paid_value_of_the_last_request
FROM refund_requests
WHERE user_id = 123

Мой запрос не гарантирует значениеpaid принадлежит последней строке (той, у которой самый большой идентификатор)

Ответы [ 2 ]

0 голосов
/ 13 июня 2018
select (select count(`id`) from refund_requests where user_id = 123
and date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 DAY))
) as refund_requests_num_in_last_day,
(select paid from refund_requests where user_id = 123
and date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 DAY))
order by `id` desc limit 1
) as paid_value_of_the_last_request
0 голосов
/ 13 июня 2018

Вы можете получить последнее значение оплаченного столбца в другом предложении, например

SELECT COUNT(*) AS refund_requests_num_in_last_day,
       t.paid AS paid_value_of_the_last_request
FROM refund_requests
CROSS JOIN(
    SELECT paid
    FROM refund_requests
    WHERE FROM_UNIXTIME(date_time, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1  DAY), '%Y-%m-%d')
    AND user_id = 123
    ORDER BY id DESC
    LIMIT 1
) t
WHERE user_id = 123
AND FROM_UNIXTIME(date_time, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1  DAY), '%Y-%m-%d')

Другим способом, используя строковые функции

SELECT COUNT(*) AS refund_requests_num_in_last_day,
       SUBSTRING_INDEX(GROUP_CONCAT(paid ORDER BY id DESC),',',1) AS paid_value_of_the_last_request
FROM refund_requests
WHERE user_id = 123
AND FROM_UNIXTIME(date_time, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1  DAY), '%Y-%m-%d')

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...