GVKun编程网logo

如何基于MYSQL中的日期获取记录(如何基于mysql中的日期获取记录数据)

15

在本文中,我们将详细介绍如何基于MYSQL中的日期获取记录的各个方面,并为您提供关于如何基于mysql中的日期获取记录数据的相关解答,同时,我们也将为您带来关于c#–按日期获取记录,仅使用nhiber

在本文中,我们将详细介绍如何基于MYSQL中的日期获取记录的各个方面,并为您提供关于如何基于mysql中的日期获取记录数据的相关解答,同时,我们也将为您带来关于c# – 按日期获取记录,仅使用nhibernate进行日期部分比较、Hibernate查询以忽略时间戳的日期获取记录、MySQL Select查询以基于列表值获取记录、Mysql 获取记录总行数的有用知识。

本文目录一览:

如何基于MYSQL中的日期获取记录(如何基于mysql中的日期获取记录数据)

如何基于MYSQL中的日期获取记录(如何基于mysql中的日期获取记录数据)

我有样本数据

 ID  Name  Amount  cal_amt Run_amt  Dates 1   Test   15000    0.00  15000    2020-06-01 1   Test   15000    0.00  30000    2020-04-01 1   Test   15000    12000 30000    2020-05-01 2   Test_1   18000   0.00  25000    2020-06-01 2   Test_1   18000   0.00  35000    2020-04-01 2   Test_1   18000   16000 35000    2020-05-01

我需要获得Run_Amount的MAX(month),即:2020-06-01-> 15000

需要获取当前月份的cal_amt,即:2020-05-01-> 12000和0.00也与本月相关2020-04-01

我需要这样的输出:

 ID  Name  Amount  cal_amt Run_amt   1   Test   15000    12000  15000  2   Test_1 18000    16000  25000

它是示例数据,但还有另外几列我尝试使用 MAX()条件

ROW_NUMBER()over (PARTITION BY run_amt order by Date )

谁能建议我最好的方法

答案1

小编典典

使用ROW_NUMBER()window函数获取具有Run_amt最大月份的的行,然后进行条件聚合:

SELECT t.ID, t.Name, t.Amount,  MAX(CASE WHEN LAST_DAY(Date) = LAST_DAY(CURRENT_DATE) THEN cal_amt END) cal_amt,  MAX(CASE WHEN t.rn = 1 THEN Run_amt END) Run_amtFROM (  SELECT *,    ROW_NUMBER() OVER (PARTITION BY ID, Name, Amount ORDER BY Date DESC) rn  FROM tablename) tGROUP BY t.ID, t.Name, t.Amount

或者:

SELECT t.ID, t.Name, t.Amount,       MAX(t.cal_amt) cal_amt,       MAX(t.Run_amt) Run_amtFROM (  SELECT ID, Name, Amount,    MAX(CASE WHEN LAST_DAY(Date) = LAST_DAY(CURRENT_DATE) THEN cal_amt END)       OVER (PARTITION BY ID, Name, Amount ORDER BY Date DESC) cal_amt,    FIRST_VALUE(Run_amt) OVER (PARTITION BY ID, Name, Amount ORDER BY Date DESC) Run_amt  FROM tablename) t  GROUP BY t.ID, t.Name, t.Amount

参见演示。
结果:

> ID | Name   | Amount | cal_amt | Run_amt> -: | :----- | -----: | ------: | ------:>  1 | Test   |  15000 |   12000 |   15000>  2 | Test_1 |  18000 |   16000 |   25000

c# – 按日期获取记录,仅使用nhibernate进行日期部分比较

c# – 按日期获取记录,仅使用nhibernate进行日期部分比较

无论何时与这些记录相关联,我都希望从特定日期获取所有记录.到目前为止,我有这样的方法:
public IQueryable<Record> QueryByDay(DateTime day)
{
    DateTime from = day.Date;
    DateTime to = day.Date.AddDays(1);

    return repository.Table
        .Where(t => t.MyDate >= from && t.MyDate < to);
    }

但是在linq-to-object中我们可以做(假设Table现在是一些集合):

public IEnumerable<Record> QueryByDay(DateTime day)
{
    return repository.Table
        .Where(t => t.MyDate.Date == day.Date);
}

这显然更具可读性,感觉更干净.我想知道是否有更好的方法来编写使用数据库存储和nhibernate的第一个方法?

解决方法

如评论中所述,您的LINQ查询与NH 3.3一起正常工作.

在早期版本中,您可以使用HQL:

return session.createquery("from MyClass where date(MyDate) = :day")
              .SetParameter("day",day.Date)
              .List<MyClass>(); //executes

您还可以通过sqlFunction使用Criteria中的日期函数.这更复杂,但允许构建更多动态查询:

return session.CreateCriteria<Foo>()
              .Add(Restrictions.Eq(
                       Projections.sqlFunction("date",NHibernateUtil.Date,Projections.Property("MyDate")),day.Date))
                .List<MyClass>(); //executes

Hibernate查询以忽略时间戳的日期获取记录

Hibernate查询以忽略时间戳的日期获取记录

我在DB(Oracle)表之一中有一个timestamp列tradedate。我使用hibernate作为持久层来获取数据并将其存储到DB。我有一个需要查询日期的数据库的要求。即从用户界面传递一个日期,我需要根据该日期获取过滤后的数据。

如果tradedate列仅包含日期部分,我的查询将返回正确的记录。当在tradedate列中填充时间戳值即(日期+时间)时,就会出现此问题。然后,查询不会返回这些值。

例如:说2010年10月23日在DB 5中有10条记录,其中有时间戳记条目,而5条没有

因此,我有查询只返回5没有时间戳的行。

现在我知道我需要从时间戳中提取日期,然后进行比较,以便获得特定日期的所有记录,但是我不知道如何使用Hibernate和使用HQL

我正在使用的 Java / Hibernate 中的查询如下

字符串hql =“选择从POJO清除为POJO,其中POJO.tradeDate =:date”; 查询查询=
getSession()。createQuery(hql); query.setParameter(“ date”,date);

MySQL Select查询以基于列表值获取记录

MySQL Select查询以基于列表值获取记录

我正在使用MySQL。我有3表,如下所示。

表:subject_Master

--------------------------
subjectId   | subjectShortName
----------------------------------
1           |   English
2           |   French
3           |   German
4           |   Latin
----------------------------------

表格:class_Master

-----------------------------------
classId     | className
----------------------------------
1           |   Rose
2           |   Dasy
3           |   Lily

表:subjectAllocation

------------------------------------------
allocationId    |   classId |   subjectId
-------------------------------------------
1               |   1       |   1,2
2               |   2       |   2,3,4
3               |   3       |   1,2,4

我如何获得如下的SQL结果,想获取subjectAllocation行中每个subjectId的SubjectName

ClassName   |   SubjectName
-------------------------------------------
Rose        |   English,French
Dasy        |   French,German,Latin
Lily        |   English,French,Latin

Mysql 获取记录总行数

Mysql 获取记录总行数

做实验的表:

MariaDB [test]> select * from prefix_user;
+---------+-----------+-----+-------+
| user_id | username  | age | email |
+---------+-----------+-----+-------+
|       2 | username2 |   2 |  NULL |
|       3 | username3 | 111 |     1 |
|       4 | username3 |  10 |     1 |
|       5 | username3 |  10 |  NULL |
|       6 | username3 |  10 |  NULL |
+---------+-----------+-----+-------+
5 rows in set (0.01 sec)

一般情况:

    直接用count() 函数

select count(*) from 表 where 条件;

   或者

select count(主键) from 表 where 条件;

  其中主键和*的区别主要是: * 会统计 null 的行,   

select count(*) from prefix_user where 1; // 5行
select count(email) from prefix_user ;// 2行,忽略了值为null的

当和group by 混用的时候, count() 函数返回的结果是group by之后的结果,例如    

MariaDB [test]> select count(*) from prefix_user group by age;
+----------+
| count(*) |
+----------+
|        1 |
|        3 |
|        1 |
+----------+
3 rows in set (0.01 sec)

如果我们想获取总共有多少个年龄不同的行数,有两种解决方案,

第一种, 使用子语句

select count(*) from ( select count(*) from prefix_user group by age) as a;// 结果为3

第二种, 使用 FOUND_ROWS 函数, 这个函数返回的结果是上一个查询去掉limit 限制的行数,( 有文章说 如果上一个查询含有 SQL_CALC_FOUND_ROWS 和没有 SQL_CALC_FOUND_ROWS 关键字在有limit的时候返回的结果可能不一样, 但是我做实验重现不了,希望读者知道理由可以留言)

// 不使用 SQL_CALC_FOUND_ROWS
MariaDB [test]> select count(*) from prefix_user group by age limit 2;
+----------+
| count(*) |
+----------+
|        1 |
|        3 |
+----------+
2 rows in set (0.00 sec)

MariaDB [test]> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)


// 使用 SQL_CALC_FOUND_ROWS 关键字

MariaDB [test]> select SQL_CALC_FOUND_ROWS count(*) from prefix_user group by age limit 2;
+----------+
| count(*) |
+----------+
|        1 |
|        3 |
+----------+
2 rows in set (0.00 sec)

MariaDB [test]> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)


今天关于如何基于MYSQL中的日期获取记录如何基于mysql中的日期获取记录数据的分享就到这里,希望大家有所收获,若想了解更多关于c# – 按日期获取记录,仅使用nhibernate进行日期部分比较、Hibernate查询以忽略时间戳的日期获取记录、MySQL Select查询以基于列表值获取记录、Mysql 获取记录总行数等相关知识,可以在本站进行查询。

本文标签: