从表中显示整个记录,组中的时间戳最小

时间:2015-05-07 14:34:15

标签: sql group-by

我已经尝试了大约三个小时来解决这个问题,但找不到解决方案。

如何在表格中显示每个名字的第一次出现(最短时间)的整行(全部20列)?

例如,我想做这样的事情,但这不起作用:

       public partial class p_GetTaresForReturnResult : INotifyPropertyChanged
    {

              ...

        [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsReturned", DbType="Bit")]
        public System.Nullable<bool> IsReturned
        {
            get
            {
                return this._IsReturned;
            }
            set
            {
                if ((this._IsReturned != value))
                {
                    this._IsReturned = value;
                    NotifyPropertyChanged("IsReturned");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

您必须首先获得每个名称的最短时间,然后加入到原始名称/时间匹配的表格中。

获得最短时间:

SELECT name, MIN(time) AS minTime
FROM myTable
GROUP BY name;

然后,获取所有列:

SELECT m.*
FROM myTable m
JOIN(
   SELECT name, MIN(time) AS minTime
   FROM myTable
   GROUP BY name) tmp ON tmp.name = m.name AND tmp.minTime = m.time;

答案 1 :(得分:2)

大多数数据库都支持ANSI标准窗口函数。有了这些,您可以这样做:

select t.*
from (select t.*, row_number() over (partition by name order by time) as seqnum
      from table t
     ) t
where seqnum = 1;