Я использую пакет R SQLDF, и мне не удается найти количество дней между двумя переменными даты и времени. Переменные ledger_entry_created_at
и created_at
относятся к эпохам Unix, и когда я пытаюсь вычесть их после преобразования в julianday
, я возвращаю вектор NA
.
Я взглянул на этот предыдущий вопрос и не нашел его полезным, так как мой ответ должен быть дан в SQL по причинам, выходящим за рамки этого вопроса.
Если бы кто-нибудь мог помочь мне найти способ сделать это внутри SQLDF, я был бы признателен.
Обновлено:
SELECT strftime('%Y-%m-%d %H:%M:%S', l.created_at, 'unixepoch') ledger_entry_created_at,
l.ledger_entry_id, l.account_id, l.amount, a.user_id, u.created_at
FROM ledger l
LEFT JOIN accounts a
ON l.account_id = a.account_id
LEFT JOIN users u
ON a.user_id = u.user_id
Включите код R, который вы используете для запроса.
Переменная ledger_entry_created_at
была создана с помощью следующего кода, вызываемого внутри SQLDF
: strftime('%Y-%m-%d %H:%M:%S', l.created_at, 'unixepoch') ledger_entry_created_at
. Возможно, я неправильно понимаю, что это возвращает?
Если у вас есть две метки времени UNIX и вам нужны дни между ними, то почему бы просто не вычесть и не преобразовать разницу в секундах в дни?
Этот ответ тривиален, но если у вас уже есть две метки времени UNIX и вы хотите узнать, сколько дней прошло между ними, вы можете просто взять разницу в секундах (их исходная единица) и преобразовать в дни, например
SELECT
(l.created_at - u.created_at) / (3600*24) AS diff
-- any maybe other columns here
FROM ledger l
LEFT JOIN accounts a
ON l.account_id = a.account_id
LEFT JOIN users u
ON a.user_id = u.user_id;
Я не знаю, почему ваш текущий подход терпит неудачу, поскольку временные метки на снимке экрана должны быть допустимыми входными данными для функции SQLite julianday
. Но, опять же, вам может не понадобиться такой сложный маршрут, чтобы получить желаемый результат.
Для меня эти даты выглядят как обычные текстовые метки времени / даты, метки времени эпохи нет UNIX.