我想从这样的事情出发:
username CourseID DateTaken
mikeb LST 5/9/2014
mikeb SELAGENT001 4/4/2013
chrisp AGT001 2/21/2012
chrisp SELAGENT001 6/27/2011
这样的事情:
Username LST SELAGENT001 AGT001
mikeb 5/9/2014 4/4/2013
chrisp 6/27/2011 2/21/2012
我试着错过了交叉表,但是因为我正在处理日期,所以我很难过。有什么帮助吗?
答案 0 :(得分:0)
这是ANSI SQL的解决方案,假设每个username, courseid
对只有一行,它将返回预期的结果。否则,它会为每对获取最大datetaken
值。
SELECT
username,
MAX(CASE WHEN courseid = 'LST' THEN datetaken END) AS lst,
MAX(CASE WHEN courseid = 'SELAGENT001' THEN datetaken END) AS selagent001,
MAX(CASE WHEN courseid = 'AGT001' THEN datetaken END) AS agt001
FROM t
GROUP BY username
如果你想要Postgres特定的答案,tablefunc
模块中有一个crosstab()
函数,但我个人总是喜欢便携式解决方案而非DBMS特定。
作为参考,您还可以查看this answer