【发布时间】:2012-03-09 21:11:22
【问题描述】:
我正在尝试为我的数据库编写一个 SQL 查询,该查询将检索所有特定用户事件。如果它们被标记为重复出现,我希望它们在开始日期后的 52 周内每周出现一次。有没有更好的方法来做到这一点?我当前的代码看起来很笨重。
我的表格结构如下:
event (
event_id INT NOT NULL AUTO_INCREMENT, (PK)
title VARCHAR(80) NOT NULL,
description VARCHAR(200),
event_start DATETIME,
event_end DATETIME,
group_id INT NOT NULL,
recurring BOOLEAN
);
Users{
UserID (PK)
Username
}
Groups{
GroupID (PK)
GroupName
}
Membership{
UserID (FK)
GroupID (FK)
}
这是我目前的查询,目前无法使用,有人可以帮我吗?
var result = db.Query(
@"SELECT e.event_id, e.title, e.description, e.event_start, e.event_end, e.group_id, e.recurring
FROM event e
JOIN Membership m ON m.GroupID = e.group_id
WHERE e.recurring
AND m.UserID = ?
AND e.event_start >= ?
AND e.event_end <= ?
UNION ALL
SELECT e.event_id, e.title, e.description, DATEADD(week, w.weeks, e.event_start),
DATEADD(week, w.weeks, e.event_end), e.group_id, e.recurring
FROM event e
JOIN Membership m ON m.GroupID = e.group_id,
(SELECT row_number() OVER (ORDER BY Object_ID) AS weeks
FROM SYS.OBJECTS) AS w
WHERE NOT e.recurring
AND m.user_id = ?
AND e.event_start >= ?
AND e.event_end <= ?", username, start, end, username, start, end
);
谁能帮我调整我的代码,使其选择所有不重复的事件,并在 52 周内同时选择重复事件?
【问题讨论】:
-
附带说明,请记住一年没有 52 周。
-
52.177457 周!不过,它更容易四舍五入,不是吗?! :)
-
我已经看到系统在每次没有 52 周的情况下,都会在盲目恐慌中获得另外几个丑陋的黑客攻击。
-
希望那时我能够避免这种情况! :)
-
查询的实际结果与您想要的结果有何不同?
标签: sql sql-server database relational-database