如何SQL查询最后插入的行组

时间:2014-05-20 18:45:21

标签: mysql sql rows

我尝试像这样的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行插入。

1 个答案:

答案 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个记录。