Оператор CASE между двумя таблицами (Advanced) - PullRequest
0 голосов
/ 13 мая 2018

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

У меня есть две таблицы, которые отслеживают скаковых лошадей. Один отслеживает их информацию, другой - результаты гонки. Некоторые из этих лошадей будут разведены. Для того, чтобы их разводили, им должно быть не менее 3 лет, и они должны были участвовать в этом году или в предыдущем году.

Например - Стратосфера родилась в 2000 году, она имеет право на разведение, начиная с 2003 года. Однако она участвовала в гонках в 2002, 2003, 2004, 2005 и 2006 годах. Это означает, что ее "открытыми годами" являются 2008, 2009, 2010 и т. Д. и т. д.

Я не уверен, как обосновать это, потому что это будет что-то вроде (из таблицы лошадей) YOB + 3, и с учетом v_testhorse (где записи) последняя ДАТА +1 год И что в этом году нет жеребят (HorseID НЕ равен DamID или SireID).

Моя цель, чтобы это отображалось так - HorseName, YOB, Gender, YEARS OPEN (это значение, которое я пытаюсь создать)

Заранее спасибо - дайте мне знать, если вам нужна дополнительная информация!

РЕДАКТИРОВАТЬ: Структура таблицы Лошади: HID (идентификационный номер, уникальный для каждой лошади) HName (Имя лошади) YOB Пол Производитель SireID Dam DamID Тип OName Стабильный

Результаты:

  • Опции SID (ShowID, уникальный для каждого шоу) Дата SName (как 00-00-0000) Хост CName Класс Пол Год Место Жетоны Заработок HName

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: SqFiddle http://sqlfiddle.com/#!9/5e1ad6, но если он не работает, вот код, который я использовал. Я ввел только несколько значений, потому что обе базы данных довольно большие, но вот одна лошадь, которую нужно проверить!

CREATE TABLE Horses 
(HID INT(11), 
 HName VARCHAR(225), 
 YOB YEAR, 
 Sire VARCHAR(225), 
 SireID INT(5), 
 Dam VARCHAR(225), 
 DamID INT(5) );

INSERT INTO Horses (HID, HName, YOB, Sire, SireID, Dam, DamID)
VALUES ('17578','Stratosphere','2001','Stonebridge First', '464', 'Cloud Nine', '6714');
INSERT INTO Horses (HID, HName, YOB, Sire, SireID, Dam, DamID)
VALUES ('36791','Troposphere','2012','Trapper Joe', '36595', 'Stratosphere', '17578');
INSERT INTO Horses (HID, HName, YOB, Sire, SireID, Dam, DamID)
VALUES ('38249','Xalena','2011','Arlin', '31886', 'Stratosphere', '17578');


CREATE TABLE Results 
(HID INT(11), 
 HName VARCHAR(225), 
 Date2 DATE, 
 CName VARCHAR(225), 
 SName VARCHAR(225), 
 ShowID INT(5) );
 
INSERT INTO Results (HID, HName, Date2, CName, SName, ShowID)
VALUES ('17578','Stratosphere','2004-10-10','SHRA October Trotting Derby, 1 mile, 3YO Trotters', 'SHRA October Racemeet', '13');

INSERT INTO Results (HID, HName, Date2, CName, SName, ShowID)
VALUES ('17578','Stratosphere','2007-01-19','Snow Drift Trot, 3YO+ Trotting FM', 'SHRA Start the Season Meet', '889');

1 Ответ

0 голосов
/ 13 мая 2018

Учитывая, что две таблицы названы horses и race_results, что-то похожее на приведенное ниже должно в значительной степени помочь.

SELECT * FROM horses
LEFT JOIN  race_results race ON (
  race.horse_id = horses.id 
  AND race.year IN (YEAR(CURDATE()), (YEAR(CURDATE()) - 1))
)
WHERE TIMESTAMPDIFF( YEAR, horses.dob, now()) >= 3;

Считайте вышеупомянутое как POC, и вы можете реализовать его на основе структуры ваших таблиц.

Обновление:

Если вы хотите изменить тип данных вашего столбца, просто создайте другой столбец Date2 с правильным типом данных, а затем выполните следующий запрос, как только вы перепроверете все значения в столбце Date2, вы можете удалить Date столбец.

UPDATE table_name SET Date2 = STR_TO_DATE(
  CONCAT(
    LEFT(SUBSTRING_INDEX(Date,',',1), length(Date)-2)), 
    " ",
    SUBSTRING_INDEX(Date,',',-1)
  ), '%M %d %Y'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...