从 SQL 中的时间戳获取第一个日期
Get first date from timestamp in SQL
我的 Moodle db
table
每个 session
sessid
和 timestart
。 table 看起来像这样:
+----+--------+------------+
| id | sessid | timestart |
+----+--------+------------+
| 1 | 3 | 1456819200 |
| 2 | 3 | 1465887600 |
| 3 | 3 | 1459839600 |
| 4 | 2 | 1457940600 |
| 5 | 2 | 1460529000 |
+----+--------+------------+
如何从 SQL
中的 timestamps
获取 every
session
first
date
?
你可以很容易地使用这个:
select sessid,min(timestart) FROM mytable GROUP by sessid;
关于你的第二个问题,是这样的:
SELECT
my.id,
my.sessid,
IF(my.timestart = m.timestart, 'yes', 'NO' ) AS First,
my.timestart
FROM mytable my
LEFT JOIN
(
SELECT sessid,min(timestart) AS timestart FROM mytable GROUP BY sessid
) AS m ON m.sessid = my.sessid;
查询
select sessid, min(timestart) as timestart
from your_table_name
group by sessid;
如果您甚至需要 id
,那就是另一个视角。
select t.id, t.sessid, t.timestart from
(
select id, sessid, timestart,
(
case sessid when @curA
then @curRow := @curRow + 1
else @curRow := 1 and @curA := sessid end
) as rn
from your_table_name t,
(select @curRow := 0, @curA := '') r
order by sessid,id
)t
where t.rn = 1;
试试这个。
SELECT
*
FROM
tbl
WHERE
(sessid, timestart) IN (
SELECT tbl2.sessid, MIN(tbl2.timestart)
FROM tbl tbl2
WHERE tbl.sessid = tbl2.sessid
);
我的 Moodle db
table
每个 session
sessid
和 timestart
。 table 看起来像这样:
+----+--------+------------+
| id | sessid | timestart |
+----+--------+------------+
| 1 | 3 | 1456819200 |
| 2 | 3 | 1465887600 |
| 3 | 3 | 1459839600 |
| 4 | 2 | 1457940600 |
| 5 | 2 | 1460529000 |
+----+--------+------------+
如何从 SQL
中的 timestamps
获取 every
session
first
date
?
你可以很容易地使用这个:
select sessid,min(timestart) FROM mytable GROUP by sessid;
关于你的第二个问题,是这样的:
SELECT
my.id,
my.sessid,
IF(my.timestart = m.timestart, 'yes', 'NO' ) AS First,
my.timestart
FROM mytable my
LEFT JOIN
(
SELECT sessid,min(timestart) AS timestart FROM mytable GROUP BY sessid
) AS m ON m.sessid = my.sessid;
查询
select sessid, min(timestart) as timestart
from your_table_name
group by sessid;
如果您甚至需要 id
,那就是另一个视角。
select t.id, t.sessid, t.timestart from
(
select id, sessid, timestart,
(
case sessid when @curA
then @curRow := @curRow + 1
else @curRow := 1 and @curA := sessid end
) as rn
from your_table_name t,
(select @curRow := 0, @curA := '') r
order by sessid,id
)t
where t.rn = 1;
试试这个。
SELECT
*
FROM
tbl
WHERE
(sessid, timestart) IN (
SELECT tbl2.sessid, MIN(tbl2.timestart)
FROM tbl tbl2
WHERE tbl.sessid = tbl2.sessid
);