我尝试像这样的SQL查询:(也许这很简单,我是新学习者)
tableA
---------------------------------------
id ------ name ----- score--hit--date
1784---- PlayerA ----- 20----9---20.05.2014
1793---- PlayerB ----- 18----5---20.05.2014
1792---- Playerc ----- 16----2---20.05.2014
1791---- PlayerD ----- 10----0---20.05.2014
1790---- PlayerG ----- 20----7---19.05.2014
1789---- PlayerO ----- 12----6---19.05.2014
1788---- PlayerT ----- 9-----8---19.05.2014
1787---- PlayerZ ----- 7-----0---19.05.2014
我想这样:
--TODAYS-BEST SCORERS-
name ----- score--hit
PlayerA --- 20-----9
PlayerB ----18-----5
Playerc --- 16-----2
PlayerD -- 10-----0
和
-YESTERDAYS-BEST SCORERS-
name -------- score--hit
PlayerG ------ 20-----7
PlayerO -------12-----6
PlayerT ------ 9------8
PlayerZ ----- 7------0
行计算全天变化,而不是静态值。昨天插入20行,但今天有12行插入。
答案 0 :(得分:1)
对于今天的记录:
SELECT name, score, hit
FROM tableA
WHERE date = CURDATE()
对于昨天的记录:
SELECT name, score, hit
FROM tableA
WHERE date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
如果你想要的是最后一天而不是今天,请注意这只适用于您将日期正确存储为DATE
- 类型(example)的情况:
SELECT name, score, hit
FROM tableA
WHERE date = (SELECT MAX(date) FROM tableA)
如果你想要倒数第二天(example),那么
SELECT name, score, hit
FROM tableA
WHERE date = (
SELECT date
FROM tableA
GROUP BY date
ORDER BY date DESC
LIMIT 1,1
)
此子查询的作用是什么?它对所有日期进行分组,因此,不是五个带日期的记录(在示例中),您将有两个记录。接下来,它按日期按降序对这些记录进行排序,因此DESC
。这意味着您将拥有第20个记录,第二个记录包含第17个记录以及其他任何日期记录。接下来,它仅使用LIMIT
选择第二条记录(因此倒数第二天)。
主查询仅检索与当天匹配的记录,即示例中的第17个记录。