Разработчик SQL - Дни между двумя конкретными записями

https://i.stack.imgur.com/3vREY.jpg

Я включил пример в ссылку выше. Можете ли вы помочь мне найти количество дней между каждым идентификатором, ЕСЛИ ТИП - "C", а TYPE_ID - 123?

Например - количество дней между ID 313031 составляет 1146 дней (между 20.02.2018 и 01.01.2015), поскольку мы проигнорируем другой ID, потому что он имеет ТИП A.

Большинству людей здесь нужны образцы данных и ожидаемый результат в виде форматированного текста, а не изображений или ссылок на изображения.

jarlh 18.12.2018 14:21

Какие СУБД вы используете? (Что касается даты / времени, многие продукты далеки от ANSI SQL.)

jarlh 18.12.2018 14:22

Предоставьте более подробную информацию

Mostafa Sayed 18.12.2018 15:35

@jarlh Спасибо. Это мой первый пост, поэтому мне не разрешили ничего прикреплять. Они разрешили только ссылку.

D.SQL 18.12.2018 17:21

Прикреплять ничего не нужно, просто отредактируйте свой вопрос. Запишите образцы данных в соответствующие столбцы. Когда закончите, отметьте эту часть и нажмите {} - готово!

jarlh 18.12.2018 21:07
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сначала вам нужно определить записи, которые вы хотите сравнить. Например, вы можете использовать MIN (дата) и MAX (дата), но это действительно зависит от ваших данных.

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

Так, например, если вы хотите сравнить первую и последнюю дату для данного идентификатора:

Select ID, 
Min(Date), 
MAX(Date),
Min(Date) - MAX(Date) as difference_in_days
From your_table
WHERE TYPE = 'C' and  TYPE_ID = 123
GROUP BY ID

это будет работать:

select id,max1-min1  from (select max(date) as max1,min(date) as min1,id from tablename 
where type='C' group by id )  

Спасибо! Это очень полезно. Можете ли вы показать способ показать количество дней между каждой датой (без максимума)? Спасибо!

D.SQL 18.12.2018 15:53

количество дней между датами ??? какие две даты вы хотите ?? потому что в вашем столе много дат ??

nikhil sugandh 18.12.2018 16:08

Например, ID 313032 - разница между 01.01.2015, 21.01.2016 и 20.03.2018.

D.SQL 18.12.2018 17:15

@ D.SQL select id,max1-min1 from (select max(date) as max1,min(date) as min1,id from tablename where type='C' group by id ) where id=313032; просто отфильтруйте вышеуказанный запрос по id !!!!

nikhil sugandh 18.12.2018 17:29

Спасибо! Но это не показывает все даты в строках, только минимальную и максимальную. Может ли он показать каждую дату и даты между каждой строкой?

D.SQL 18.12.2018 17:45

@ D.SQL, поэтому, когда присутствуют три даты, вам нужно два вывода, две разницы, не так ли ??

nikhil sugandh 18.12.2018 17:47

да! но этот запрос только показывает разницу между 20.03.2018 и 01.01.2015

D.SQL 18.12.2018 17:53

создать временную таблицу с действительными (type = 'C') идентификаторами и датами. Добавить номер - раздел по ID, упорядочить по дате. Затем присоединитесь к этой таблице, используя id = id и rownr = rownr-1. Это смещает даты на 1 запись, так что теперь вы можете выполнить dateiff.

J.D. 18.12.2018 19:09

Другие вопросы по теме