我有一个查询,该查询使用子查询来检测联接表中的项目是否具有重复记录,如果是,则数据不会被拉入父查询:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
imageCam.image = image
// var discover = MainViewController()
// discover.stuffImages[IndexPath.row]
picker.dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
如您所见,通过使用HAVING子句使用一种简单的方式处理重复项,实际上我丢失了存储的原始记录,因为抛出了任何大于2的聚合记录。有没有更好的方法可以做到这一点,以使我不会丢失一些数据,而无需创建要查询的新表?
答案 0 :(得分:0)
如果subqerry中“具有”,请尝试使用“ distinct”代替。每个网址只有一次,不会丢失,即使有两个条目也是如此。
因此您的代码应为:
...选择DISTINCT a.listing_datetime,...
,然后最后没有“ having”。
答案 1 :(得分:0)
如果要删除重复的行,请使用DISTINCT子句。如果要基于特定列上的分区查找重复项,请使用ROW_NUMBER窗口函数。
乍一看,您的子查询无效,因为您是按一个列分组,而在其他列中未使用任何其他聚合函数。
select distinct
a.listing_datetime, a.listing_price, a.listing_sqft, a.listing_p_per_sqft,
a.listing_neighborhood, i.listing_tokens
from
agg_cl_data as a
left join incoming_cl_data_desc as i
on a.listing_url = i.listing_url
where a.listing_datetime between curdate() - interval 30 day and curdate()