我不确定如何做到这一点,我假设CASE声明,但让我知道是否有更好的方法。
我有两张桌子跟踪赛马。一旦跟踪他们的信息,另一个他们的比赛结果。其中一些马将会繁殖。为了繁殖,他们必须是3岁或以上,并且他们必须在那一年或前一年参加比赛。
例如 - 平流层出生于2000年,她有资格从2003年开始繁殖。然而,她在2002年,2003年,2004年,2005年和2006年参加比赛。这意味着她的开放年份#34;是2008年,2009年,2010年等等。
我不知道如何为此做一个案例,因为它会像(来自Horses表)YOB + 3,并考虑到v_testhorse(记录所在的位置)最后DATE +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');

答案 0 :(得分:0)
考虑将两个表命名为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'
)