我有一个查询,它从列中获取最大日期时间,以及从表中获取其他列的相应数据。但是为了选择最大日期时间,我必须使用子查询,以便获得其他列的相应值。但由于我使用带有别名的子查询,我无法在其上进行查看。因此,我的查询可以修改为给出我想要的结果,并且我能够使用该查询创建我的视图。
我为我的需求做的sql查询在下面。它给了我想要的结果但是我无法在查询之上查看。因此我不得不对separete视图进行查看以获得所需的结果。可以修改查询以给我结果,并且我能够在查询之上进行查看。
SELECT SD.a_n,SD.t_c,SD.ppl,date_time FROM(SD JOIN(SELECT SD.t_c,MAX(date_time)AS MDT FROM SD GROUP BY t_c)wn_m_d_t ON(((SD.t_c = wn_m_d_t。 t_c)AND(SD.date_time = wn_m_d_t.MDT))))WHERE((SD.t_c IN('drep','sred')))
答案 0 :(得分:2)
您的查询格式更具可读性:
SELECT SD.a_n, SD.t_c, SD.ppl, date_time
FROM SD JOIN
(SELECT SD.t_c, MAX(date_time) AS MDT
FROM SD
GROUP BY t_c
) wn_m_d_t
ON SD.t_c = wn_m_d_t.t_c AND SD.date_time = wn_m_d_t.MDT
WHERE SD.t_c IN ('drep', 'sred');
MySQL有一个字符串限制,视图不能包含from
子句中的子查询。您似乎想要在SD
中获取每个t_c
的最新日期的记录。这是另一种方法:
SELECT SD.a_n, SD.t_c, SD.ppl, SD.date_time
FROM SD
WHERE SD.t_c IN ('drep', 'sred') AND
NOT EXISTS (select 1
from sd sd2
where sd2.t_c = sd.t_c and
sd2.date_time > sd.date_time
);
而且,这将在视图中起作用。 select
和from
子句中允许使用子查询。
这就是说,"在SD
中获取所有行,其中没有相同t_c
和更大date_time
的记录。"
答案 1 :(得分:0)
我认为这个查询也可以不使用子查询。
SELECT SD.a_n, SD.t_c, SD.ppl, SD.date_time
FROM SD
LEFT JOIN SD AS sd2
ON sd2.t_c = SD.t_c
AND sd2.date_time > SD.date_time
WHERE SD.t_c IN ('drep', 'sred') AND sd2.t_c IS NULL