Условие в mysql

Я пытаюсь просмотреть записи, используя запрос MySQL, имейте в виду, что этот процесс должен происходить в базе данных, поэтому я не могу использовать лучшую альтернативу, которая была бы Python.

Table_a

#animalid calvdate lactationid 
animal_A 2015-06-12 1
animal_A 2017-06-10 2
animal_B 2018-08-10 1

Table_b   

 #animalid milkdate morningmilk midmilk eveningmilk

    animal_A 2018-02-16 8 0 8
    animal_A 2016-02-12 12 0 12

мой запрос

   SELECT *, calvdate FROM Table_b
    INNER JOIN Table_a ON Table_b.animalid = Table_a.animalid
    WHERE TO_DAYS(milkdate) - TO_DAYS(calvdate)<400
   GROUP BY Table_b.animalid and milkdate

вывод моего запроса

#animalid milkdate morningmilk midmilk eveningmilk calvdate
    animal_A 2018-02-16 8 0 8 2015-06-12

Как я могу захватить все записи из table_b, которые укладываются в 400-дневный запас, не усекая правильные записи из table_b ожидаемый результат:

 #animalid milkdate morningmilk midmilk eveningmilk calvdate
        animal_A 2018-02-16 8 0 8 2015-06-12
        animal_A 2017-02-12 12 0 12 2017-06-10

Что вы имеете в виду под без усечения правильных записей из table_b

nacho 09.04.2019 10:13

Чего должна достичь эта группа. И можете ли вы добавить ожидаемый результат, пожалуйста.

P.Salmon 09.04.2019 10:13

group by должна избавиться от дубликатов

Mirieri Mogaka 09.04.2019 10:17

Это не очень хорошее использование группы, вместо этого используйте отдельные и прочитайте dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

P.Salmon 09.04.2019 10:26

Обратите внимание, что WHERE TO_DAYS(milkdate) - TO_DAYS(calvdate)<400, вероятно, будет включать строки, которые вам не нужны, поскольку условие не учитывает ситуации, когда дата кальцификации стоит после даты молока.

outis 09.04.2019 13:08

Пожалуйста, используйте CREATE TABLE и INSERT ... VALUES для примера данных. (Желаемые результаты не обязательно представлять в виде примера кода, так как результаты являются выходными данными кода, а не самим кодом.)

outis 09.04.2019 13:11
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
6
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

AND — оператор. Выражение Table_b.animalid and milkdate приводит аргументы к логическим значениям и принимает логическую конъюнкцию (которая всегда будет равна 0). Следовательно, каждая строка в результате находится в одной группе, поэтому в результате вы видите только одну.

Чтобы сгруппировать по нескольким столбцам, используйте запятую:

GROUP BY Table_b.animalid, milkdate
Ответ принят как подходящий

Используйте запрос подвыборки, который вернет все записи из первой таблицы и подходящие значения из второй таблицы.

select animalid as testday_animalid, milkdate, 
(select calvdate as calvdate from lactationmaster where animalid = testday_animalid and calvdate < milkdate order by calvdate desc limit 1) as calvdate
from view_testlact
order by milkdate;

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