избегать дублирования записей в запросе и исправлении даты

У меня есть две небольшие проблемы с запросом

1) Я делаю поиск клиентов, связанных с журналами, этот запрос должен принести мне те записи би-отметки времени, где код равен идентификатору клиентов, проблема заключается в том, что клиенты не должны повторяться, если есть 3 записи журнала с одним и тем же клиентом, я хочу, чтобы только первая запись была сделана, попробуйте сделать это с .distinct, но это не работает таким образом.

2) Следующая ошибка заключается в том, что при сравнении между датами, потому что это дата-время, если я ищу между датами 2014-06-28 и 2014-06-30, и есть запись, следующая за 2014 -06-30 13:06:20 не примет это во внимание на консультации, потому что оно находится в большем диапазоне из-за времени, которое у него есть. Как я мог это исправить?

  def self.total_clientes(params)
   query =  joins("left outer join clientes on bitacoratiempos.Codigo=clientes.IdCli")
                      .where("(bitacoratiempos.RutaId = :rutaId or :rutaId = '') AND (bitacoratiempos.IdEmpresa = :idempresa)",{rutaId: params[:search], idempresa: params[:search0]})
                      .distinct
  query = query.where('bitacoratiempos.HI between ? AND ?', (params[:search1].to_date).strftime('%Y-%m-%d'), (params[:search2].to_date).strftime('%Y-%m-%d')) if params[:search1].present? and params[:search2].present?
  query
  end
1
задан 23.12.2016, 02:26
1 ответ

Я не знаю язык, но чтобы это предотвращать, ты можешь добавлять к твоему query, что

SELECT MIN(id_cliente) FROM bitacoras where id_cliente = 1 (por ejemplo)

Вторая ошибка легкая для того, чтобы быть решенным, сложи его один день во вторую дату. Так что, если даже (search2) 2014-01-10, и ты складываешь один его будет оставаться 2014-01-11 и он возьмет каждые часы до 2014-01-10 23:59

0
ответ дан 24.11.2019, 11:54
  • 1
    ты можешь использовать функцию find_by_sql и применять то, что он говорит @sioesi – roxdurazo 20.01.2017, 01:26