Я не был уверен, как еще сделать это, я принимаю заявление 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 Стабильный
Результаты:
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: 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');
Учитывая, что две таблицы названы 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'
)
Других решений пока нет …